lai*_*e9m 2 python urllib2 python-3.x python-requests
我需要在自己的项目中完成一个登录任务.幸运的是我发现有人已经完成了.
这是相关的代码.
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()
Run Code Online (Sandbox Code Playgroud)
我已经测试了代码,它运行得很好(根据info).
现在我想将它移植到Python 3以及使用requestslib而不是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
)
Run Code Online (Sandbox Code Playgroud)
另外,按照将`Cookie`放在`CookieJar`中的答案,我尝试再次提出相同的请求,但这些都没有奏效.
这就是我在这里寻求帮助的原因.
有人会告诉我正确的工作方式吗?谢谢〜
Session并不完全类似,但对于你的特定用例,它们完美匹配.Session:请求将自动创建一个,将其附加到Session,然后将cookie保留Session给您.allow_redirects是True在默认情况下,你并不需要传递的参数.将所有这些放在一起,您的代码应如下所示:
import requests
s = requests.Session()
s.post(website_url, data = params)
Run Code Online (Sandbox Code Playgroud)
使用Session您刚刚创建的任何未来请求,如果适当,将自动将cookie应用于它们.
| 归档时间: |
|
| 查看次数: |
2659 次 |
| 最近记录: |