nodejs-request 获取但在浏览器或 curl 中工作时没有 body 内容
There is no body content when nodejs-request get but work in browser or curl
请求没有 body 包含 header "content-length: 0" 的内容。
资源:https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096
它是一个 rss link,在浏览器和 curl 中运行良好。
在 linux 上进行 curl 测试,wget 也能正常工作。
这里是简单的代码:
const req = require('request');
req.get({
url: 'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096',
rejectUnauthorized: false
}, (err, res, body) => {
console.log(res)
});
测试在线模拟器得到相同的结果
https://repl.it/repls/ScalyAquamarineObjectpool
我觉得应该是一个text/xml的内容,不是空的
回复:
{
statusCode: 200,
body: '',
headers:
{ 'cache-control': 'private,No-cache',
'set-cookie':
[ 'ASP.NET_SessionId=kzdhyxq2grttp5awwpqzxyen; path=/; secure; HttpOnly' ],
'x-frame-options': 'SAMEORIGIN',
'strict-transport-security': 'max-age=0',
'x-xss-protection': '1; mode=block',
'x-content-type-options': 'nosniff',
'content-security-policy':
'frame-ancestors \'self\' https://www-mgr.gov.taipei http://www-mgr.gov.taipei',
date: 'Wed, 03 Apr 2019 06:44:47 GMT',
connection: 'close',
'content-length': '0' },
request:
{ uri:
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'www.doe.gov.taipei',
port: 443,
hostname: 'www.doe.gov.taipei',
hash: null,
search: '?SN=8A3B3293C269E096',
query: 'SN=8A3B3293C269E096',
pathname: '/OpenData.aspx',
path: '/OpenData.aspx?SN=8A3B3293C269E096',
href:
'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096' },
method: 'GET',
headers: {} }
}
您的回调函数签名有误。在 Node.JS 中,回调的第一个参数通常是(可选的)错误对象。
试试这个:
const req = require('request');
req.get({
url: 'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096',
rejectUnauthorized: false
}, (err, res, body) => {
console.log(res)
});
关于您更新的问题:添加用户代理似乎可以解决问题:
const req = require('request');
req.get({
url: 'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096',
rejectUnauthorized: false,
headers: {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3750.0 Iron Safari/537.36'
}
}, (err, res, body) => {
console.log(body)
});
请求没有 body 包含 header "content-length: 0" 的内容。
资源:https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096
它是一个 rss link,在浏览器和 curl 中运行良好。 在 linux 上进行 curl 测试,wget 也能正常工作。
这里是简单的代码:
const req = require('request');
req.get({
url: 'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096',
rejectUnauthorized: false
}, (err, res, body) => {
console.log(res)
});
测试在线模拟器得到相同的结果 https://repl.it/repls/ScalyAquamarineObjectpool
我觉得应该是一个text/xml的内容,不是空的
回复:
{
statusCode: 200,
body: '',
headers:
{ 'cache-control': 'private,No-cache',
'set-cookie':
[ 'ASP.NET_SessionId=kzdhyxq2grttp5awwpqzxyen; path=/; secure; HttpOnly' ],
'x-frame-options': 'SAMEORIGIN',
'strict-transport-security': 'max-age=0',
'x-xss-protection': '1; mode=block',
'x-content-type-options': 'nosniff',
'content-security-policy':
'frame-ancestors \'self\' https://www-mgr.gov.taipei http://www-mgr.gov.taipei',
date: 'Wed, 03 Apr 2019 06:44:47 GMT',
connection: 'close',
'content-length': '0' },
request:
{ uri:
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'www.doe.gov.taipei',
port: 443,
hostname: 'www.doe.gov.taipei',
hash: null,
search: '?SN=8A3B3293C269E096',
query: 'SN=8A3B3293C269E096',
pathname: '/OpenData.aspx',
path: '/OpenData.aspx?SN=8A3B3293C269E096',
href:
'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096' },
method: 'GET',
headers: {} }
}
您的回调函数签名有误。在 Node.JS 中,回调的第一个参数通常是(可选的)错误对象。
试试这个:
const req = require('request');
req.get({
url: 'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096',
rejectUnauthorized: false
}, (err, res, body) => {
console.log(res)
});
关于您更新的问题:添加用户代理似乎可以解决问题:
const req = require('request');
req.get({
url: 'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096',
rejectUnauthorized: false,
headers: {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3750.0 Iron Safari/537.36'
}
}, (err, res, body) => {
console.log(body)
});