【问题标题】:cURL giving the correct resonse but nodejs fetch redirecting to access deniedcURL 给出了正确的响应,但 nodejs 获取重定向到访问被拒绝
【发布时间】:2021-03-28 03:56:54
【问题描述】:

我想从网站下载一个 json 文件。使用 chrome 开发工具,当我复制文件下载 url 的 cURL 命令时,它给了我所需的 json 响应。但是当复制 fetch (nodejs) 命令并通过“node-fetch”模块运行时,它会将我重定向到拒绝访问页面。

通过 async/await 使用 Fetch(完全从该网站复制)

(async ()=>{
    try
{
  var res=await fetch("url/getjson?file", {
    "headers": {
      "accept": "application/json, text/plain, */*",
      "accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
      "content-type": "application/json",
      "sec-fetch-dest": "empty",
      "sec-fetch-mode": "cors",
      "sec-fetch-site": "same-origin",
      "sec-gpc": "1",
      "cookie": "cooookiiieee=correctcookie; AuthToken=gibberishh; UserName=blahblah; EntityRefId=pleasehelp"
      
    },
    "referrer": "referrerurl",
    "referrerPolicy": "strict-origin-when-cross-origin",
    "body": null,
    "method": "GET",
    "mode": "cors"
  });
  const content = await res.json();
  console.log(content);
}
catch(err){
console.log(err)
}
})();


获取响应

FetchError: invalid json response body at url/error/accessdenied reason: Unexpected token < in JSON at position 1
    at /home/user/Documents/node_modules/node-fetch/lib/index.js:272:32
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async /home/user/Documents/test/app.js:25:19 {
  type: 'invalid-json'
}

而使用 cURL 命令的响应是正确的 json 文件,因为它没有重定向我。

卷曲命令

curl 'url/getjson?file'   
-H 'Connection: keep-alive'   
-H 'Accept: application/json, text/plain, */*'   
-H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Safari/537.36'   
-H 'Content-Type: application/json'   
-H 'Sec-GPC: 1'   -H 'Sec-Fetch-Site: same-origin'   
-H 'Sec-Fetch-Mode: cors'   -H 'Sec-Fetch-Dest: empty'   
-H 'Referer: referrerurl'   
-H 'Accept-Language: en-GB,en-US;q=0.9,en;q=0.8'   
-H 'Cookie: 
cooookiiieee=correctcookie; AuthToken=gibberishh; UserName=blahblah; EntityRefId=pleasehelp'   
--compressed

【问题讨论】:

  • 所以如果你在await res.json();之前添加console.log(res.status);,它将打印403?
  • 响应正常 200
  • curl 命令是什么样子的?
  • 我已经添加了 cURL 命令。
  • 似乎 json 没有通过node-fetch 调用返回。将res.json() 替换为res.text() 看看它是否显示了什么。

标签: node.js fetch node-fetch


【解决方案1】:

在我在标头中添加 User-Agent 后收到正确的响应,因为它正在考虑将默认节点代理视为 bot。 它必须在 cookie 之前添加,即在发送 AuthToken 之前。

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多