cURL 给出正确的响应,但 nodejs 提取重定向到访问被拒绝
cURL giving the correct resonse but nodejs fetch redirecting to access denied
我想从网站下载 json 文件。使用 chrome 开发工具,当我复制文件下载 url 的 cURL 命令时,它会给我所需的 json 响应。但是当通过“node-fetch”模块复制 fetch (nodejs) 命令和 运行 时,它会将我重定向到拒绝访问的页面。
通过 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 命令
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
我在 headers 中添加 User-Agent 后收到了正确的响应,因为它正在将默认节点代理视为 bot。
它必须在 cookie 之前添加,即在发送 AuthToken 之前。
我想从网站下载 json 文件。使用 chrome 开发工具,当我复制文件下载 url 的 cURL 命令时,它会给我所需的 json 响应。但是当通过“node-fetch”模块复制 fetch (nodejs) 命令和 运行 时,它会将我重定向到拒绝访问的页面。
通过 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 命令
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
我在 headers 中添加 User-Agent 后收到了正确的响应,因为它正在将默认节点代理视为 bot。 它必须在 cookie 之前添加,即在发送 AuthToken 之前。