我正在创建 bash 脚本来检查给定 URL 返回的 HTTP 代码。我的文件包含大约 50k 个 JSON 格式的 URL;这是第一个(文件头):
"responseHeader":{
"status":0,
"QTime":7336},
"response":{"numFound":50032,"start":0,"maxScore":1.0,"docs":[
{
"documentURL":"http....."},
and so on
我需要循环这个文件,检查每个 URL 返回的 HTTP 代码是什么,并将其以 HTTP 代码 + URL 的格式保存在另一个文件中。到目前为止我只有这个curl命令来检查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