NodeJS是一個神奇的工具,快速。NodeJS和HTTP客戶端 - 是否支持Cookie?
我想知道如果支持的HTTPClient餅乾和如果能以被用來模擬非常基本的瀏覽器的行爲!
幫助將非常感謝! =)
編輯:
發現這一點:node-httpclient(似乎很有用)不工作!
NodeJS是一個神奇的工具,快速。NodeJS和HTTP客戶端 - 是否支持Cookie?
我想知道如果支持的HTTPClient餅乾和如果能以被用來模擬非常基本的瀏覽器的行爲!
幫助將非常感謝! =)
編輯:
發現這一點:node-httpclient(似乎很有用)不工作!
只需在響應標題中從Set-Cookie
參數中獲取cookie,並將它們發送回未來請求。不應該很難。
簡答:沒有。並不是很好。
我實現了這個作爲npm的一部分,以便我可以從github下載tarball。下面是這是否代碼:https://github.com/isaacs/npm/blob/master/lib/utils/fetch.js#L96-100
var cookie = get(response.headers, "Set-Cookie")
if (cookie) {
cookie = (cookie + "").split(";").shift()
set(opts.headers, "Cookie", cookie)
}
該文件的得到了很多具體的NPM-東西(日誌,設置等),但它應該告訴你的總體思路。基本上,我正在收集cookie,以便在重新定向時可以在下一個請求中發送它們。
我已經與Mikeal Rogers討論瞭如何將這種功能添加到他的「request」util中,並完全支持由文件系統支持的cookiejar,但它確實非常棘手。你必須跟蹤哪些域發送cookie,等等。
這可能永遠不會直接包含在節點中,因此。但留意用戶空間的發展。
編輯:現在,默認情況下在請求中支持。
如果你正在尋找做餅乾客戶端可以使用https://github.com/mikeal/request
M.
我按照他們的文檔中描述的「jar:true」來嘗試它,但是不工作... – 2014-07-13 12:59:47
下面的代碼演示如何使用的cookie從服務器端,下面是從HTTP客戶端解析餅乾演示API服務器檢查Cookie哈希:
var express = require("express"),
app = express(),
hbs = require('hbs'),
mongoose = require('mongoose'),
port = parseInt(process.env.PORT, 10) || 4568;
app.configure(function() {
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(__dirname + '/public_api'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.get('/api', function (req, res) {
var cookies = {};
req.headers.cookie && req.headers.cookie.split(';').forEach(function(cookie) {
var parts = cookie.split('=');
cookies[ parts[ 0 ].trim() ] = (parts[ 1 ] || '').trim();
});
if (!cookies['testcookie']) {
console.log('First request');
res.cookie('testcookie','testvaluecookie',{ maxAge: 900000, httpOnly: true });
res.end('FirstRequest');
} else {
console.log(cookies['testcookie']);
res.end(cookies['testcookie']);
}
});
app.listen(port);
在客戶端,只需進行正常的請求,上述服務器API,我使用的請求模塊,默認情況下它傳輸的cookie爲每個請求。
request(options, function(err, response, body) {
console.log(util.inspect(response.headers));
res.render("index.html", {layout: false,user: {
username: req.session.user + body
}});
});
Zombie.js是另一種選擇,如果你想要瀏覽器般的行爲。它「在請求中保持狀態:歷史記錄,Cookie,HTML5本地和會話記錄等。」。關於殭屍的Cookie API的更多信息:http://zombie.labnotes.org/API
在這裏其他的答案提出不包括大量的特殊情況下的cookies
自制的解決方案,一個功能完整的解決方案,可以輕鬆突破,缺乏大量的標準功能,如作爲持久性。
由於mentioned by isaacs,request模塊現在有真正的cookie支持。 They provide examples with cookies on their Github page。這些示例解釋瞭如何通過將"tough-cookie" cookie jar添加到您的請求來啓用Cookie支持。
注:餅乾罐包含並幫助您管理您的餅乾。
引述其Readme(截至2015年4月):
Cookies是默認情況下禁用(否則,他們將在 後續請求中使用)。要啓用cookie,請將
jar
設置爲true
(或者在 默認值或選項中)並安裝tough-cookie。
Cookie管理通過tough-cookie module提供。它是一個穩定的,功能完整的Cookie管理工具,實現"HTTP State Management Mechanism" - RFC 6265。它甚至提供了多種選項來堅持(存儲)cookies,使用cookie store。
如果不難,也許你可以在答案中提供一個示例代碼片段? – 2016-04-28 05:00:56