2
我需要在自己的項目中完成登錄任務。我發現有人已經完成了它。
以下是相關的代碼。Python請求lib,是requests.Session相當於urllib2的opener?
import re,urllib,urllib2,cookielib
class Login():
cj = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
def __init__(self,name='',password='',domain=''):
self.name=name
self.password=password
self.domain=domain
urllib2.install_opener(self.opener)
def login(self):
params = {'domain':self.domain,'email':self.name,'password':self.password}
req = urllib2.Request(
website_url,
urllib.urlencode(params)
)
self.openrate = self.opener.open(req)
print self.openrate.geturl()
info = self.openrate.read()
我測試了代碼,它工作的很好(根據info
)。
現在我想將它移植到Python 3以及使用requests
lib代替urllib2。
我的想法:
- ,因爲原來的代碼使用
opener
,雖然不能確定,我認爲它相當於requests
是requests.Session
- 我應該做的請求時,傳遞一個
jar = cookiejar.CookieJar()
?不確定。
我已經試過類似
import requests
from http import cookiejar
from urllib.parse import urlencode
jar = cookiejar.CookieJar()
s = requests.Session()
s.post(
website_url,
data = urlencode(params),
allow_redirects = True,
cookies = jar
)
而且,隨後的回答中Putting a `Cookie` in a `CookieJar`,我試圖再次犯同樣的請求,但這些都不奏效。
這就是爲什麼我在這裏尋求幫助。
有人會告訴我做正確的工作方式嗎?謝謝〜
謝謝,我終於找到了它的工作。它有'urlencode'導致了這個問題.BTW,你說「一個開場和一個Session不完全相似」,那麼opener的等價物是什麼? – laike9m
沒有開門人的等價物,因爲請求完全拒絕了這個想法。 「會話」是請求維持狀態的地方,因此從這個意義上說,它們就像開場者一樣,但它們只有一種類型,它們都是狀態維護:從這個意義上說,它們不是開場白。 – Lukasa