【发布时间】:2023-03-13 15:47:01
【问题描述】:
在浏览器中,如果我发送 GET 请求,请求会同时发送 cookie。现在想模拟一个来自Node的GET请求,那代码怎么写呢?
【问题讨论】:
标签: node.js
在浏览器中,如果我发送 GET 请求,请求会同时发送 cookie。现在想模拟一个来自Node的GET请求,那代码怎么写呢?
【问题讨论】:
标签: node.js
使用奇妙的request 库cookie 默认启用。你可以像这样发送自己的(取自 Github 页面):
var j = request.jar()
var cookie = request.cookie('your_cookie_here')
j.add(cookie)
request({url: 'http://www.google.com', jar: j}, function () {
request('http://images.google.com')
})
【讨论】:
http 模块有这样做的方法,我可以知道更多的细节。
如果您想使用本机 http:request() 方法来执行此操作,则需要在 options 的 headers 成员中设置适当的 Set-Cookie 标头(请参阅 HTTP 参考以了解它们的外观)争论;本机代码中没有处理 cookie 的特定方法。如果需要具体示例,请参阅 Mikeal 的 request 库中的源代码和或 connect 中的 cookieParser 代码。
但 Femi 几乎可以肯定是正确的:处理 cookie 充满了相当挑剔的细节,而且您几乎总是会更好地使用已经编写好的代码,更重要的是,经过测试。如果您尝试重新发明这个特定的轮子,您很可能会想出似乎大部分时间都可以工作的代码,但偶尔会莫名其妙地失败。
【讨论】:
var jar = request.jar();
const jwtSecret = fs.readFileSync(`${__dirname}/.ssh/id_rsa`, 'utf8');
const token = jwt.sign(jwtPayload, jwtSecret, settings);
jar.setCookie(`any-name=${token}`, 'http://localhost:12345/');
const options = {
method: 'GET',
url: 'http://localhost:12345',
jar,
json: true
};
request(options, handleResponse);
【讨论】: