我需要在我自己的项目中完成一个登录任务。幸运的是我发现有人已经完成了它 这是相关的代码。
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`中的答案,我尝试再次提出相同的请求,但这些都没有效果。
这就是我在这里寻求帮助的原因 有人会告诉我正确的工作方式吗?谢谢〜
答案 0 :(得分:5)
Session
并不完全相似,但对于您的特定用例,它们完全匹配。Session
时,您无需传递CookieJar:请求会自动创建一个,将其附加到Session
,然后将Cookie保留到Session
为您allow_redirects
默认为True
,您无需传递该参数。将所有这些放在一起,您的代码应如下所示:
import requests
s = requests.Session()
s.post(website_url, data = params)
使用您刚刚创建的Session
发出的任何请求,如果合适,都会自动将Cookie应用于这些请求。