2017-02-22 109 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