2017-03-09 66 views
2

我想要使用從我的chrome複製的cookie,但會產生很多錯誤。如何在python 3中使用cookie?

import urllib.request 
import re 

def open_url(url): 
header={"User-Agent":r'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'} 
Cookies={'Cookie':r"xxxxx"} 
Request=urllib.request.Request(url=url,headers=Cookies) 
response=urllib.request.urlopen(Request,timeout=100) 
return response.read().decode("utf-8") 

我的代碼出錯了嗎?這是頭= Cookies?

+1

該cookie不是標題。所以不要通過它。您最需要查看cookiejar模塊。這不是微不足道的,所以最簡單的方法無疑是使用請求。 –

+0

這不是一個壞的嘗試;讓我強烈鼓勵使用更高級別的庫,該規範是同步代碼的「請求」。 Aaalso,爲什麼'header'變量未被使用?你打算建立一個同時擁有'User-Agent'和'Cookie'字段的頭文件嗎?最後,我建議先用'httpie'命令行嘗試一下。 –

回答

0

您可以使用更好的庫(恕我直言) - requests

import requests 

headers = { 
    'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36' 
} 

cookies = dict(c1="cookie_numba_one") 

r = requests.get('http://example.com', headers = headers, cookies = cookies) 
print(r.text) 
2

使用urllib.request裏時,正確的方法是使用填充有OpenerDirector一個CookieProcessor

cookieProcessor = urllib.request.HTTPCookieProcessor() 
opener = urllib.request.build_opener(cookieProcessor) 

然後使用opener,它會自動地處理餅乾:

response = opener.open(request,timeout=100) 

默認情況下,CookieJar(http.cookiejar.CookieJar)用於簡單的內存存儲中,但您可以使用FileCookieJar在需要長期儲存永久性Cookie,或者如果你想如果你想使用cookies現有的Web瀏覽器中使用存儲在一個cookies.txt現在傳統的Mozilla格式


持久Cookie甚至http.cookiejar.MozillaCookieJar,你必須先將它們存儲在一個cookie.txt兼容文件中,並將它們加載到MozillaCookieJar中。對於Mozilla,您可以找到附加組件Cookie Exporter。對於其他瀏覽器,您必須通過在瀏覽器中閱讀您需要的cookie的內容手動創建cookie.txt文件。格式可以在The Unofficial Cookie FAQ找到。提取物:

...每行包含一個名稱 - 值對。 cookie.txt的文件的示例可具有看起來像這樣的條目:每行代表一個單件的存儲的信息

.netscape.com TRUE/FALSE 946684799 NETSCAPE_ID 100103

。每個字段之間插入一個製表符。

由左到右,這裏是每個字段表示:

  • 域 - 創建和可讀取可變域。
  • flag - 指示給定域中的所有機器是否可以訪問該變量的TRUE/FALSE值。該值由瀏覽器自動設置,具體取決於您爲域設置的值。
  • path - 變量有效的域內的路徑。
  • secure - 指示是否需要與域進行安全連接來訪問變量的TRUE/FALSE值。 * expiration - 變量將過期的UNIX時間。 UNIX時間定義爲自1970年1月1日00:00:00 GMT以來的秒數。
  • name - 變量的名稱。
  • value - 變量的值。

正常方式是模仿一個完整的會話,並從響應自動提取的cookie。 「

+0

如果我想使用從我的網絡瀏覽器複製的cookie,我該怎麼辦? –

0

」當接收到一個HTTP請求時,服務器可以發送一個帶響應的Set-Cookie頭。這個cookie通常由瀏覽器存儲,之後,cookie值會隨同一個服務器發出的每個請求一起發送作爲Cookie HTTP標頭的內容「從mozilla網站提取。

此鏈接 Please go through this 將幫助您提供有關標頭和http請求的一些知識。請通過這個。這可能會回答你的答案。