与えられた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