2010-12-03 61 views
2


我想從python程序訪問網頁。 我必須設置Cookie來加載頁面。
我用httplib2的庫,但我沒有找到如何添加自己的cookiePython創建Cookie,然後使用Cookie加載頁面

resp_headers, content = h.request("http://www.theURL.com", "GET") 

如何創建與正確的名稱和值的cookie,將它添加到函數,然後加載頁面?
感謝

回答

5
http = httplib2.Http() 
# get cookie_value here 
headers = {'Cookie':cookie_value} 
response, content = http.request("http://www.theURL.com", 'GET', headers=headers) 

您可能需要添加另一個頭參數指定其他HTTP請求參數。

11

http://code.google.com/p/httplib2/wiki/Examples希望能幫助)

餅乾

當自動化的東西,你經常需要「登錄」保持某種形式的會話/狀態與服務器。有時候,這是通過基於表單的身份驗證和cookie實現的。您將表單發佈到服務器,並在傳入的HTTP標頭中使用cookie進行響應。您需要在隨後的請求中將此cookie傳回服務器以維護狀態或保持會話存活。

這是一個如何處理您的HTTP POST時處理cookie的例子。

首先,讓我們導入我們將使用模塊:

 
import urllib 
import httplib2 

現在,讓我們定義將需要的數據。在這種情況下,我們正在使用表示用戶名和密碼的2個字段進行表單發佈。

 
url = 'http://www.example.com/login' 
body = {'USERNAME': 'foo', 'PASSWORD': 'bar'} 
headers = {'Content-type': 'application/x-www-form-urlencoded'} 

現在我們可以發送HTTP請求:

 
http = httplib2.Http() 
response, content = http.request(url, 'POST', headers=headers, body=urllib.urlencode(body)) 

在這一點上,我們的「反應」變量包含由服務器返回的HTTP報頭字段的字典。如果返回cookie,您將看到包含cookie值的「set-cookie」字段。我們希望把這個值,放入傳出HTTP標頭爲我們的後續請求:

 
headers['Cookie'] = response['set-cookie'] 

現在我們可以使用這個頭髮送一個請求,它將包含餅乾,所以服務器可以識別我們。

所以......這是一個腳本中的全部內容。我們登錄到網站,然後讓使用我們收到的cookie的另一個請求:

 
#!/usr/bin/env python 

import urllib 
import httplib2 

http = httplib2.Http() 

url = 'http://www.example.com/login' 
body = {'USERNAME': 'foo', 'PASSWORD': 'bar'} 
headers = {'Content-type': 'application/x-www-form-urlencoded'} 
response, content = http.request(url, 'POST', headers=headers, body=urllib.urlencode(body)) 

headers = {'Cookie': response['set-cookie']} 

url = 'http://www.example.com/home' 
response, content = http.request(url, 'GET', headers=headers) 
0

您也可以只使用的urllib2

 import urllib2 

     opener = urllib2.build_opener() 
     opener.addheaders.append(('Cookie', 'cookie1=value1;cookie2=value2')) 
     f = opener.open("http://www.example.com/") 
     the_page_html = f.read()