从文件中获取 URL 地址并检查 HTTP 代码

从文件中获取 URL 地址并检查 HTTP 代码

我正在创建 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

相关内容