URL이 여전히 작동하는지 확인하기 위해 확인해야하는 URL 목록이 있습니다. 나를 위해 그렇게하는 bash 스크립트를 작성하고 싶습니다.
반환 된 HTTP 상태 코드 (예 : 200, 404, 500 등) 만 필요합니다. 더 이상은 없습니다.
편집 페이지에 “404 찾을 수 없음”이라고 표시되지만 200 OK 메시지가 반환되면 문제가있는 것입니다. 잘못 구성된 웹 서버이지만이 경우를 고려해야 할 수도 있습니다.
이에 대한 자세한 내용 은 URL이 “404”라는 텍스트가 포함 된 페이지로 이동하는지 확인을 참조 하십시오.
답변
Curl에는 다음과 같은 특정 옵션 --write-out
이 있습니다.
$ curl -o /dev/null --silent --head --write-out '%{http_code}\n' <url>
200
-o /dev/null
일반적인 출력을 버립니다.--silent
진행 표시기를 버립니다.--head
GET 대신 HEAD HTTP 요청을합니다.--write-out '%{http_code}\n'
필요한 상태 코드를 인쇄합니다.
이것을 완전한 Bash 스크립트로 마무리하려면 :
#!/bin/bash
while read LINE; do
curl -o /dev/null --silent --head --write-out "%{http_code} $LINE\n" "$LINE"
done < url-list.txt
(독수리 독자는 이것이 URL 당 하나의 curl 프로세스를 사용하므로 포크 및 TCP 연결 페널티가 부과됨을 알 수 있습니다. 여러 URL을 단일 컬로 결합하면 더 빠르지 만 괴물 같은 반복을 작성할 공간이 없습니다. 컬에 필요한 옵션이 있습니다.)
답변
wget --spider -S "http://url/to/be/checked" 2>&1 | grep "HTTP/" | awk '{print $2}'
상태 코드 만 인쇄합니다.
답변
Phil이 이미 제공 한 답변을 확장합니다. 호출에 xargs를 사용하는 경우 병렬 처리를 추가하는 것은 bash에서 생각할 필요가 없습니다.
여기에 코드 :
xargs -n1 -P 10 curl -o /dev/null --silent --head --write-out '%{url_effective}: %{http_code}\n' < url.lst
-n1 : 목록에서 하나의 값만 curl 호출에 대한 인수로 사용합니다.
-P10 : 언제든지 10 개의 curl 프로세스를 유지합니다 (예 : 10 개의 병렬 연결).
write_out
더 많은 데이터를 사용하여 추출 할 수있는 데이터 (시간 등)는 curl 매뉴얼의 매개 변수를 확인하십시오 .
누군가에게 도움이되는 경우 이것은 현재 사용중인 전화입니다.
xargs -n1 -P 10 curl -o /dev/null --silent --head --write-out '%{url_effective};%{http_code};%{time_total};%{time_namelookup};%{time_connect};%{size_download};%{speed_download}\n' < url.lst | tee results.csv
Office 도구로 가져올 수있는 CSV 파일로 데이터를 출력합니다.
답변
이것은 wget
Alpine Linux에서도 거의 모든 곳에 존재 하는 널리 사용 가능한에 의존합니다 .
wget --server-response --spider --quiet "${url}" 2>&1 | awk 'NR==1{print $2}'
설명은 다음과 같습니다.
--quiet
Wget의 출력을 끕니다.
Source-wget 매뉴얼 페이지
--spider
[…] 페이지를 다운로드하지 않고 페이지가 있는지 확인합니다. […]
Source-wget 매뉴얼 페이지
--server-response
HTTP 서버에서 보낸 헤더와 FTP 서버에서 보낸 응답을 인쇄합니다.
Source-wget 매뉴얼 페이지
그들이 말하지 않은 것은 --server-response
해당 헤더 출력이 표준 오류 (sterr)에 인쇄 되므로 stdin 으로 리디렉션 해야한다는 것 입니다.
표준 입력으로 전송 된 출력 awk
은 HTTP 상태 코드를 추출 하기 위해 파이프 할 수 있습니다 . 그 코드는 다음과 같습니다.
- 두 번째 (
$2
) 공백이 아닌 문자 그룹 :{$2}
- 헤더의 첫 번째 줄에 :
NR==1
그리고 우리가 그것을 인쇄 할 때문에 … {print $2}
.
wget --server-response --spider --quiet "${url}" 2>&1 | awk 'NR==1{print $2}'
답변
사용 curl
은 HTTP 헤더 만 (안 전체 파일)을 가져오고 그것을 구문 분석 :
$ curl -I --stderr /dev/null http://www.google.co.uk/index.html | head -1 | cut -d' ' -f2
200
답변
wget -S -i *file*
파일의 각 URL에서 헤더를 가져옵니다.
grep
상태 코드를 구체적으로 필터링 하십시오.
답변
Python으로 작성된 “webchk”도구를 찾았습니다. URL 목록에 대한 상태 코드를 반환합니다.
https://pypi.org/project/webchk/
출력은 다음과 같습니다.
▶ webchk -i ./dxieu.txt | grep '200'
http://salesforce-case-status.dxi.eu/login ... 200 OK (0.108)
https://support.dxi.eu/hc/en-gb ... 200 OK (0.389)
https://support.dxi.eu/hc/en-gb ... 200 OK (0.401)
도움이 되었기를 바랍니다.