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