주어진 URL에서 반환된 HTTP 코드를 확인하기 위해 bash 스크립트를 만들고 있습니다. 내 파일에는 JSON 형식의 URL이 약 50,000개 포함되어 있습니다. 첫 번째 파일 헤더는 다음과 같습니다.
"responseHeader":{
"status":0,
"QTime":7336},
"response":{"numFound":50032,"start":0,"maxScore":1.0,"docs":[
{
"documentURL":"http....."},
and so on
이 파일을 반복하여 각 URL에서 반환되는 HTTP 코드가 무엇인지 확인한 다음 HTTP 코드 + URL 형식으로 다른 파일에 저장해야 합니다. 지금까지는 http 코드를 확인하는 데 이 컬 명령만 사용했습니다.
curl -s -o /dev/null -I -w "%{http_code}\n" URL >> httpCodeFile
어떤 도구/방법(grep, awk, sed)을 사용해야 하는지에 대한 도움과 조언을 주시면 감사하겠습니다.
파일에서 URL을 가져오기 위해 이 함수를 만들었지만 구문이 확실하지 않습니다.
function checkHTTP(){
cat URL_list | while read line
do
var = $(grep documentURL) URL_list
curl -s -o /dev/null -I -w "%{http_code}\n" ${var} + " TEST " >> httpCodeFile
done
}
많은 URL이 404를 반환해야 하지만 저는 000만 반환합니다.
답변1
올바른 방법은 다음과 같이 하는 것입니다.jq
+curl
해결책:
유효한 샘플 input.json
:
{
"responseHeader": {
"status": 0,
"QTime": 7336
},
"response": {
"numFound": 50032,
"start": 0,
"maxScore": 1,
"docs": [
{
"documentURL": "https://unix.stackexchange.com/questions"
},
{
"documentURL": "https://unix.stackexchange.com/problems"
},
{
"documentURL": "https://stackoverflow.com/questions"
},
{
"documentURL": "https://stackoverflow.com/issues"
}
]
}
}
처리:
jq -r '.response.docs[].documentURL
| "curl -s -o /dev/null -I -w \"%{http_code} \(.)\n\" --url \(.)"' input.json \
| sh > http_codes.out
결과 http_codes.out
내용:
$ cat http_codes.out
200 https://unix.stackexchange.com/questions
404 https://unix.stackexchange.com/problems
200 https://stackoverflow.com/questions
404 https://stackoverflow.com/issues