文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

requests上传文件Cookies设置

2023-01-30 23:20

关注

有的网站需要上传文件,requests也是可以实现的

import requests

files = {'file': open('favicon.ico', 'rb')}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)

返回信息:

image.pngimage.png

里面包含files字段,而form字段为空,上传文件会单独有一个files字段来标识



Cookies

requests获取和设置Cookies只需要一步完成

import requests

r = requests.get('https://www.baidu.com')
print(r.cookies)
for key, value in r.cookies.items():
    print('key', key)
    print('value', value)

返回信息:

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

key BDORZ

value 27315


当前,也可以直接用Cookie来维持登陆状态,以知乎为例,首先手动登陆知乎,将headers中的Cookie内容复制下来,如下

image.png


替换成自己的Cookie,将其设置到Headers里面,然后发送请求,代码如下:

import requests
from lxml import etree

headers = {
    'Cookie': '_zap=f4035a0b-8bfb-48a5-aa70-b7d8f4869ba1; d_c0="ANCiqSDGFQ-PTtCXuKtT4JGPAeK9D1cRg6o=|1551939261"; _xsrf=2pscD3eR3N0O9jzliq2mz10TV2GgjiS1; l_n_c=1; q_c1=595a8a7635b94542b6b1c2c38ebbbf47|1556768730000|1551953498000; n_c=1; __utmc=51854390; l_cap_id="NmM5ZTFkNmQ0ZThkNGI0NDhiYmVmNjk2N2NlYTI0MjY=|1556779328|650703f96dd8d8a37edaad8d5e0881387e4b741b"; r_cap_id="YzdmODU3NDgyZmExNGRiYjlmY2Q4ZTRkZTU1OGM0ZTk=|1556779328|d53af2805f0470f6094cd6f89d77e5e951613f52"; cap_id="YmE4ZWUxNWQzYTUzNGRiOGIxMWRmZTdkZjgzOTIxY2Q=|1556779328|ee07cf5f16741ec8adf2260f5ee5b4721eee368d"; tgw_l7_route=060f637cd101836814f6c53316f73463; capsion_ticket="2|1:0|10:1556784084|14:capsion_ticket|44:OWQ1NWFhZWFkYjE3NDEyYmI1OTk5MjhmMDllZTQ5Y2M=|1e096bca37010e87064d5f808f1e751d91360682533003571a4831f394762b52"; z_c0="2|1:0|10:1556784104|4:z_c0|92:Mi4xZUtBQUJnQUFBQUFBMEtLcElNWVZEeVlBQUFCZ0FsVk42UEczWFFEZ3lsNlhuMWVSaE5ya3VyUkJwcFltWEVRNmJn|3cd3acf0dc8fd2d29d2d49bb0e1be9336228f3acefe04ffc0285def38ff993b3"; __utma=51854390.1875686252.1556768732.1556779331.1556784108.3; __utmb=51854390.0.10.1556784108; __utmz=51854390.1556784108.3.2.utmcsr=zhihu.com|utmccn=(referral)|utmcmd=referral|utmcct=/signin; __utmv=51854390.100--|2=registration_date=20170921=1^3=entry_date=20170921=1',
    'Host': 'www.zhihu.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}

r = requests.get('https://www.zhihu.com', headers=headers).content.decode('utf-8')
# 使用xptah解析html页面,获取登陆后的文章
content = etree.HTML(r)
tag_list = content.xpath("//a[@data-za-detail-view-element_name='Title']/text()")
print(tag_list)

返回信息:

['有哪些好用不火的软件?', '你见过最渣的渣女有多渣?', '三十岁左右的你,现在收入多少?', '如果好莱坞来拍《流浪地球》应该如何?', '你们看到过最丧的句子是什么?', '亲姐弟之间要不要避嫌?']



当前也可以通过cookies参数来设置,需要构造RequestsCookieJar对象,需要分割一下cookies,相对麻烦,不过效果是相同的,代码如下:

import requests
from lxml import etree

cookies = '_zap=f4035a0b-8bfb-48a5-aa70-b7d8f4869ba1; d_c0="ANCiqSDGFQ-PTtCXuKtT4JGPAeK9D1cRg6o=|1551939261"; _xsrf=2pscD3eR3N0O9jzliq2mz10TV2GgjiS1; l_n_c=1; q_c1=595a8a7635b94542b6b1c2c38ebbbf47|1556768730000|1551953498000; n_c=1; __utmc=51854390; l_cap_id="NmM5ZTFkNmQ0ZThkNGI0NDhiYmVmNjk2N2NlYTI0MjY=|1556779328|650703f96dd8d8a37edaad8d5e0881387e4b741b"; r_cap_id="YzdmODU3NDgyZmExNGRiYjlmY2Q4ZTRkZTU1OGM0ZTk=|1556779328|d53af2805f0470f6094cd6f89d77e5e951613f52"; cap_id="YmE4ZWUxNWQzYTUzNGRiOGIxMWRmZTdkZjgzOTIxY2Q=|1556779328|ee07cf5f16741ec8adf2260f5ee5b4721eee368d"; tgw_l7_route=060f637cd101836814f6c53316f73463; capsion_ticket="2|1:0|10:1556784084|14:capsion_ticket|44:OWQ1NWFhZWFkYjE3NDEyYmI1OTk5MjhmMDllZTQ5Y2M=|1e096bca37010e87064d5f808f1e751d91360682533003571a4831f394762b52"; z_c0="2|1:0|10:1556784104|4:z_c0|92:Mi4xZUtBQUJnQUFBQUFBMEtLcElNWVZEeVlBQUFCZ0FsVk42UEczWFFEZ3lsNlhuMWVSaE5ya3VyUkJwcFltWEVRNmJn|3cd3acf0dc8fd2d29d2d49bb0e1be9336228f3acefe04ffc0285def38ff993b3"; __utma=51854390.1875686252.1556768732.1556779331.1556784108.3; __utmb=51854390.0.10.1556784108; __utmz=51854390.1556784108.3.2.utmcsr=zhihu.com|utmccn=(referral)|utmcmd=referral|utmcct=/signin; __utmv=51854390.100--|2=registration_date=20170921=1^3=entry_date=20170921=1'
jar = requests.cookies.RequestsCookieJar()
headers = {'Host': 'www.zhihu.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
           }
for cookie in cookies.split(';'):
    key, value = cookie.split('=', 1)
    jar.set(key, value)

r = requests.get('https://www.zhihu.com', cookies=jar, headers=headers).content.decode('utf-8')
# 使用xptah解析html页面,获取登陆后的文章
content = etree.HTML(r)
tag_list = content.xpath("//a[@data-za-detail-view-element_name='Title']/text()")
print(tag_list)

返回信息:

['你认为真正的好电影是什么样的?', '一个程序员的水平能差到什么程度?', '有什么是你面试很多次都失败后才知道的?', '一个人健身前和健身后有什么区别?', '香港警察真的像TVB演的那样吗?', '炫富真的很爽吗?']


测试后,同样是可以登录知乎的。



会话维持

在requests中,如果直接利用get()或post()等方法的确可以做到模拟网页请求,但这实际上是相当于不同的会话,其实相当于你用了两个浏览器打开了不同的页面。

设想一个场景,第一个请求利用post()方法登录了网站,第二次想获取成功登陆后的个人信息,又用了一次get()方法请求个人信息页面,这就相当于打开了两个浏览器,是完全两个不同的会话,肯定不能获取个人信息的。

解决这个问题的方法就是维持同一个会话,也就是相当于打开一个新的浏览器选项卡,而不是打开一个新的浏览器,需要用到新的利器Session对象。

利用它,可以方便的维护同一个会话,而不用担心cookies的问题

错误示例如下

import requests

r1 = requests.get('http://httpbin.org/cookies/set/username/root')
print(r1.text)
r2 = requests.get('http://httpbin.org/cookies')
print(r2.text)

返回信息:

image.png

从显示的结果来看,很明显是两次请求


Session的使用,正确的示例:

import requests

s = requests.Session()
r1 = s.get('http://httpbin.org/cookies/set/username/root')
print(r1.text)
r2 = s.get('http://httpbin.org/cookies')
print(r2.text)

返回信息:

image.png

利用Session可以做到模拟同一个会话而不用担心cookies的问题,通常用于模拟登陆成功之后再进行下一步的操作。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯