파일에서 URL 주소를 가져오고 HTTP 코드를 확인하세요.

파일에서 URL 주소를 가져오고 HTTP 코드를 확인하세요.

주어진 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

관련 정보