ファイルから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

おすすめ記事