2012-06-03 37 views
13

我正在嘗試編寫一個簡單的腳本,用於從網頁中提取文本並處理該字符串。但是,該網站要求我登錄。我成功登錄到該網站。這是我登錄的方式:Google Apps腳本中的Cookie處理 - 如何在標頭中發送Cookie?

var payload = {"name1":"val1","name2":val2"}; 

var opt ={"payload":payload,"method":"post"}; 

var respose = UrlFetchApp.fetch("http://website.com/login",opt); 

登錄後,網站將我置於http://website.com/home。我檢查了response.getContentText(),我可以確認我已成功登錄,因爲它包含http://website.com/home中的文本。 現在我需要獲取http://website.com/page的內容並對其進行處理。 我首先假定該腳本可以自行處理cookie,並與

var pagedata = UrlFetchApp.fetch("http://website.com/page);//Did not work 

這顯然沒有工作和pagedata.getContentText()說我先登錄,這表明小甜餅沒有順利通過進行..

然後我試着提取服務器在登錄時響應的cookie,並將其與該請求一起發送。

var cookie = response.getAllHeaders()['Set-Cookie'];  

// variable cookie now contains a legitimate cookie. 

// It contains 'JSESSIONID=blabla;Path=/' and 
// it is the ONLY cookie that server responds. 

我試圖在我的頁面請求中發送該cookie。

var header = {'Cookie':cookie}; 

var opt2 = {"header":header}; 

var pagedata = UrlFetchApp.fetch("http://website.com/page",opt2); 

我認爲即使是現在小甜餅無法正常發送,作爲內容又說我登錄。

我正確地傳遞cookie嗎?我需要關於在請求中發送cookie的正確方法的幫助。

回答

7

在這裏你可以找到餅乾規格:) response.getAllHeaders(['設置Cookie: http://www.w3.org/Protocols/rfc2109/rfc2109

你在你的代碼中潛在問題']可以返回一個字符串或一個字符串表,如果從服務器發回多個'set-cookie'屬性。

埃裏克是正確的,你不能沒有消化它就返回cookie。在你的代碼

二錯誤:

var opt2 = {"header":header}; 

應該

var opt2 = {"headers":header}; 

也要小心,天然氣使用谷歌的IP。可能會發生兩次連續獲取使用不同的IP。 您正在連接的服務器可能會依賴於會話IP。

確定服務器只認證後發送回一個餅乾嗎?

+0

感謝您指出!是的,我確定服務器只發送一個auth cookie。我會嘗試用'「標題」回報# – AKarthik10

+0

編輯:我用'「標題」試過了,它工作。我可以確認它正在工作。我製作了一個PHP文件,它記錄了所請求的所有標題。我用UrlFetchApp請求了它,我可以在日誌中看到從UrlFetchApp發送的所有自定義標頭。所以我犯了錯誤的地方是「header」,它必須是「headers」。謝謝! – AKarthik10

1

看起來你是在UrlFetchApp.fetch正確設置標頭()。

我相信,在設置Cookie標頭的數據是大於在Cookie頭所期望的數據格式不同。例如,設置Cookie包含過期信息等

+0

我已經驗證它'設置Cookie:JSESSIONID = A04〜1E321E3265CB36814498F30B8D134667.w804; Path = /'。我試過傳遞整個cookie(包括'Path = /')並只發送'JSESS..'(使用split作爲分隔符)cookie。兩者都失敗了。 – AKarthik10

0

我用谷歌腳本獲取並從我的谷歌電子表格發送cookie,我認爲這是行不通的。 Cookies在幾分鐘內不同。

下面你會發現使用UrlFetchApp.fetch()從谷歌電子表格腳本請求到同一站點4塊餅乾,只是不同的是分鐘...我認爲這是可能的,使用谷歌的IP和不同任何時候...

有人知道如何解決這個問題?

的代碼是:

Cookie=response0.getAllHeaders()['Set-Cookie']; 

餅乾:

B=12gp68lcnp5q4&b=3&s=sk; expires=Sun, 29-Jul-2018 14:10:12 GMT; path=/; domain=.***.com      

B=7us258lcnp5sh&b=3&s=oc; expires=Sun, 29-Jul-2018 14:11:29 GMT; path=/; domain=.***.com      

B=5nviv8tcnp5u5&b=3&s=qf; expires=Sun, 29-Jul-2018 14:12:22 GMT; path=/; domain=.***.com      

B=c8eumg9cnp5vp&b=3&s=uj; expires=Sun, 29-Jul-2018 14:13:13 GMT; path=/; domain=.***.com      
+0

如果您有新問題,請通過單擊[問問題](https://stackoverflow.com/questions/ask)按鈕來提問。如果有助於提供上下文,請包含此問題的鏈接。 - [來自評論](/ review/low-quality-posts/16870036) –

相關問題