【发布时间】:2020-11-30 01:19:28
【问题描述】:
所以场景是这样的我
- 从本地系统 - 能够通过 curl 和 nodejs 代码调用 api。 mitmproxy 连接详情截图见截图。
- 从托管在 linode 上的服务器 - 能够通过 curl 调用 api,但在本地工作的相同代码会卡住。 mitmproxy 连接详情截图见截图。
据我猜测,这很可能与 ssl 握手被卡在某处有关。最近几天困扰我的是curl和nodejs的请求和标头相同,那么为什么不同的行为
示例卷曲curl 'https://www.nseindia.com/api/liveEquity-derivatives?index=stock_fut' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Connection: keep-alive' -H 'Cookie: _ga=GA1.2.1464035869.1595747215; RT="z=1&dm=nseindia.com&si=d2d25dd8-0b59-4941-a83c-9e3fd2ff9f63&ss=kdllvs49&sl=0&tt=0&bcn=%2F%2F684d0d37.akstat.io%2F&ul=36pqu&hd=36pwb"; ak_bmsc=32ED2E364503B6429496808D1A081032DFC42B6C6C2B0000013A315F40BDEA22~pl0PkvDhq66QJbIByCPofydTlTrNC70ggGqe1TUq9qks8cAr8R3eZemC9KyklftDSOsn0lHOiNNrEUdQWVD7K9oyJ4mGjON/9EjkvUCiHECyXvRkGJmEOaZcBzDtdvX+B8wg8spNZ3RI3jWLg7w+Asr66XwLm8l04X6nfSo9UkF+iOv49hjP4Lfhb4tC6p74oLmL/TQsX5a1gQlb9MGZznGPrXhhxFu1Rd1m3XD9/PToM=' -H 'Upgrade-Insecure-Requests: 1' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'TE: Trailers'
示例 nodejs 代码 -NODE_DEBUG=* node mytest.js
var request = require('request');
var https = require('https')
var fetch = require('node-fetch');
const httpsAgent = new https.Agent({
rejectUnauthorized: false,
secureProtocol: "TLSv1_2_method"
});
var headers = {
'Host': 'www.nseindia.com',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'TE': 'Trailers',
'Cookie': '_ga=GA1.2.1464035869.1595747215; RT=z=1&dm=nseindia.com&si=d2d25dd8-0b59-4941-a83c-9e3fd2ff9f63&ss=kdllvs49&sl=0&tt=0&bcn=%2F%2F684d0d37.akstat.io%2F&ul=36pqu&hd=36pwb; ak_bmsc=32ED2E364503B6429496808D1A081032DFC42B6C6C2B0000013A315F40BDEA22~pl0PkvDhq66QJbIByCPofydTlTrNC70ggGqe1TUq9qks8cAr8R3eZemC9KyklftDSOsn0lHOiNNrEUdQWVD7K9oyJ4mGjON/9EjkvUCiHECyXvRkGJmEOaZcBzDtdvX+B8wg8spNZ3RI3jWLg7w+Asr66XwLm8l04X6nfSo9UkF+iOv49hjP4Lfhb4tC6p74oLmL/TQsX5a1gQlb9MGZznGPrXhhxFu1Rd1m3XD9/PToM='
};
var options = {
url: 'https://www.nseindia.com/api/liveEquity-derivatives?index=stock_fut',
headers: headers
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
}
(async function(){
if(require.main==module){
console.log('before')
let data = await fetch(options.url, {
headers: {
Connection: 'keep-alive',
'Cache-Control': 'no-cache',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0'
},
agent:httpsAgent
}).then(res => res.json())
console.log(data)
}
})();
【问题讨论】: