2017-02-22 114 views
0

我想在我的第一个url请求完成后立即重定向到另一个url。原因是因为要打开第二个url,它需要第一个url会话cookie。这意味着第二个网址只能在该操作之前打开第一个网址才能打开。重定向节点请求内的URL

var request = require('request'); 
var j = request.jar(); 

request({ 
    url: first_url, 
    jar: j, 
    json: true 
}, function (error, response, body) { 
    if (!error && response.statusCode === 200) { 
     var cookies = j.getCookieString(first_url); 
     console.log("1st url cookie: "+ cookies); 
     request(second_url, function(body) { 
      var cookies2 = j.getCookieString(second_url); 
      console.log("2st url cookie: "+ cookies2); 
      console.log(body); 
     }) 

我修改了我的代码,如上所示传递会话cookie。但是,我的第二个网址仍然无法打开。我的控制台输出显示这两个网址都有相同的会话ID,所以我只假设会话cookie正确传递。

第一URL的Cookie:JSESSIONID = DD4ACC4D65F024BD06D53A648A5B4DE3

2ST URL的Cookie:JSESSIONID = DD4ACC4D65F024BD06D53A648A5B4DE3

{[错误:读ECONNRESET]代码: 'ECONNRESET',错误号: 'ECONNRESET',系统调用: '读' }

我验证会话cookie的方式在我的项目中需要首先在浏览器上打开第一个URL,然后复制并粘贴第二个URL链接以打开第二个链接。如果没有启动第一个网址,第二个链接将无法打开并最终超时请求。

请再次咨询,也许我不看正确的方向。

+0

可能重复[如何在NodeJS中维护请求会话](http://stackoverflow.com/questions/19936705/how-to-maintain-a-request-session-in-nodejs) –

回答

0

response.redirect()这里是错误的选择。首先,这不是用在这方面。当有人向您发送网络请求时您会使用它,并且您想告诉他们请求其他页面。遇到这种情况时,您需要发回30x状态,新的位置和另一端,然后重定向并请求一个新页面。这与你正在做的事情相反。

您需要做的是向第一个URL发出请求,建立会话并捕获该请求中的cookie。然后,使用这些相同的Cookie,向第2个网址发送请求。附上cookie后,第二次请求应视为已登录。

向另一个站点发出请求时跟踪服务器上的cookie的概念通常称为cookie jar,并且有许多NPM模块可以集成与request()模块保存您的登录cookie。实际上,请求模块实际上拥有自己的内置cookie jar功能。 Cookie Jar示例here

+0

嗨,谢谢非常清楚的解释和建议。请参阅我的修改后的代码并对原始主题字段进行评论,并希望您能提出一些建议。非常感谢。 – RogerMW

+0

@ user4010075 - 您的第二个请求需要使用同一个cookie jar,就像第一个请求一样。这是整个观点 - 要有一个单一的cookie jar,这两个请求都使用。 – jfriend00

+0

你是对的!使用同一个cookie jar创建第二个请求解决了我的问题。非常感谢你的帮助。 – RogerMW