Python请求lib,是request.ession相当于urllib2的开启者吗?

 手机用户2502936521 发布于 2023-02-08 23:19

我需要在自己的项目中完成一个登录任务.幸运的是我发现有人已经完成了.
这是相关的代码.

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以及使用requestslib而不是urllib2.
我的想法:

    既然原始代码使用opener,虽然不确定,我认为它的等价物requestsrequests.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  
) 

另外,按照将`Cookie`放在`CookieJar`中的答案,我尝试再次提出相同的请求,但这些都没有奏效.

这就是我在这里寻求帮助的原因.
有人会告诉我正确的工作方式吗?谢谢〜

1 个回答
    1. 一个开场白和一个Session并不完全类似,但对于你的特定用例,它们完美匹配.

      使用a时,您不需要传递CookieJar Session:请求将自动创建一个,将其附加到Session,然后将cookie保留Session给您.

      您不需要对数据进行urlencode:请求将为您执行此操作.

      allow_redirectsTrue在默认情况下,你并不需要传递的参数.

    将所有这些放在一起,您的代码应如下所示:

    import requests
    
    s = requests.Session()
    s.post(website_url, data = params)
    

    使用Session您刚刚创建的任何未来请求,如果适当,将自动将cookie应用于它们.

    2023-02-08 23:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有