我试图用Node.js (使用request模块)向第三方(不受我控制) web服务器发送HTTP请求,并被服务器重定向到登录页面。它拒绝发送页面,因为我没有登录。
由于重定向不可能发生在客户端(我请求页面,而不是解析页面),所以我不明白web服务器如何在决定是否发送页面之前检查本地数据或cookie以查看我(我的HTTP请求)是否已登录。
我的问题
在响应请求之前,web服务器可以以何种方式潜在地检查是否重定向现有页面上的GET请求?
我的代码
var request = require('request');
function checkUsername(username) {
request({
uri : "http://www.kongregate.com/accounts/" + username + "/recently-played",
method : "GET",
timeout : 10000,
//in order to avoid being redirected to the login page, I've used:
followRedirect : false,
maxRedirects : 0
}, function(error, response, body) {
if (error)
console.log("Player does not exist");
else {
console.log("Player exists!");
}
}
});
}
checkUsername("jonathan_t0dd");这避免了成功的重定向,但提供了html:
<html><body>You are being <a href="http://www.kongregate.com/session/new">redirected</a>.</body></html>我想以一种让我能够理解如何向服务器提供成功地提供我所请求的资产所需的数据的方式来理解这个场景。
发布于 2014-09-17 11:28:45
浏览器将向服务器发送cookie,以便web服务器知道您是否已登录。
如果您想手动执行此操作,可以查看网站在浏览器中设置的cookie,并将它们添加到您的请求中。
模块request具有设置cookie的api,例如:
var j = request.jar()
var cookie = request.cookie('your_cookie_here')
j.setCookie(cookie, uri);
request({url: 'http://www.google.com', jar: j}, function () {
request('http://images.google.com')
})访问请求文件查看详细信息。
发布于 2014-09-17 11:26:05
我不明白web服务器如何检查本地数据或cookie,看看我(我的HTTP请求)是否已登录,然后才决定是否向我发送该页面。
每个HTTP请求都会将Cookies发送到服务器。这就是饼干的意义所在。所以,几乎可以肯定,只要看看饼干就行了。
https://stackoverflow.com/questions/25889112
复制相似问题