requests高级用法
会话对象
当你向同一主机发送多个请求时,session会重用底层的tcp连接,从而提升性能,同时session也会为所有请求保持 cookie。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __author__:kzg
import requests s = requests.Session()
# 此地址cookie为空
r = s.get('http://httpbin.org/cookies')
print(r.text)
结果:
{
"cookies": {}
}
session可以保持cookie来访问后续同一服务器上的地址
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __author__:kzg
import requests s = requests.Session()
r = s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
print(r.text)
# cookie被保持来访问此url
rc = s.get('http://httpbin.org/cookies')
print(rc.text) 结果:
{
"cookies": {
"sessioncookie": "123456789"
}
} {
"cookies": {
"sessioncookie": "123456789"
}
}
可以修改session的属性(cookies,headers)来为请求方法(get,post)提供缺省数据,可保跨请求保持。
# -*- coding:utf-8 -*-
# __author__:kzg
import requests
# 生成session对象
s = requests.Session()
print(s.headers)
# 修改session属性
s.headers.update({'User-Agent':'kong'})
print(s.headers)
r = s.get('http://httpbin.org/headers')
print(r.text)
结果:
{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.18.1'}
{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'kong'}
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "kong"
}
}
也可以通过传递方法层的参数来提供缺省数据,它会与已设置的会话层数据合并,不能跨请求保持。
# -*- coding:utf-8 -*-
# __author__:kzg
import requests
# 生成session对象
s = requests.Session()
# 修改session属性
s.headers.update({'User-Agent':'kong'})
# 方法级参数cookies
r = s.get('http://httpbin.org/headers',cookies={'from-my': 'browser'})
print(r.text)
# 方法级参数不能被保持到下一个请求
r1 = s.get('http://httpbin.org/headers')
print(r1.text)
结果:
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Cookie": "from-my=browser",
"Host": "httpbin.org",
"User-Agent": "kong"
}
} {
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "kong"
}
}
请求与响应对象
你任何时间调用requests.*()的时候,都是在做两件重要的事情。
1、你在构建request对象,并把它发送到某服务器去请求或查询一些资源
2、产生response对象来接收从服务器返回的所有响应,也包含你创建的request对象
# _*_ coding: utf-8 _*_
import requests # 生成一个会话对象
s = requests.Session() r = requests.get('http://en.wikipedia.org/wiki/Monty_Python')
# 服务器返回来的头部信息
print r.headers
# 发送给服务器的头部信息
print r.request.headers
工作流响应体内容
如果你在请求中使用了stream=True:
1、仅有响应体会被立即下载,只有当访问response.content属性时响应体才会被下载
2、此时连接保持打开状态,需要调用response.close来关闭连接
3、连接效率低下
# _*_ coding: utf-8 _*_
import requests tarball_url = 'https://github.com/kennethreitz/requests/tarball/master'
r = requests.get(tarball_url, stream=True)
print r.headers['content-length']
结果:
3336071
文件上传
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests url = 'http://httpbin.org/post'
files = {'file': open('D:\\projects\\blog\\my_temp.xlsx', 'rb')}
ret = requests.post(url, files=files)
print(ret.text)
设置文件名、文件类型和请求头
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests url = 'http://httpbin.org/post'
files = {'file': ('my_temp.xlsx',open('D:\\projects\\blog\\my_temp.xlsx', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
ret = requests.post(url, files=files)
print(ret.text)
流式上传
允许你在请求中发送大的数据流或文件,此时requests会根据文件大小来设置headers中的content-length,所以文件最好以二进制方式打开
with open('massive-body','rb') as f:
requests.post('http://some.url/streamed', data=f)
为请求设置代理
如果需要为请求设置代理,只需要给相应的请求提供proxies参数即可。
方法一、
$ export HTTP_PROXY="http://10.10.1.10:3128"
$ export HTTPS_PROXY="http://10.10.1.10:1080"
$ python
>>> import requests
>>> requests.get("http://example.org")
方法二、
# _*_ coding: utf-8 _*_
import requests proxies={
"http":"http://10.10.1.10:3128",
"https":"http://10.10.1.10:1080",
} r = requests.get("http://example.org",proxies=proxies)
超时
为防止服务器不能及时响应,大部分发至外部服务器的请求都应该带着 timeout 参数
# _*_ coding: utf-8 _*_
import requests # 同时设置connect,read的timeout
r = requests.get('https://github.com', timeout=5)
# 分别设置connect和read的timeout
r = requests.get('https://github.com', timeout=(3.05, 27))
# 永久等待,直到读完
r = requests.get('https://github.com', timeout=None)
requests高级用法的更多相关文章
- 爬虫—Requests高级用法
Requests高级用法 1.文件上传 我们知道requests可以模拟提交一些数据.假如有的网站需要上传文件,我们也可以用requests来实现. import requests files = { ...
- python requests 高级用法
高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...
- (转)python requests 高级用法 -- 包括SSL 证书错误的解决方案
我在使用requests访问某个https网站时出现错误 error::SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify fai ...
- 爬虫之requests 高级用法
1. 文件上传 import requests files = {'file': open('favicon.ico', 'rb')} r = requests.post("http://h ...
- python requests 高级用法 -- 包括SSL 证书错误的解决方案
Session Objects会话对象 Session对象在请求时允许你坚持一定的参数.此外,还坚持由Session实例的所有请求的cookie. 让我们坚持在请求时使用 s = requests.S ...
- Python之Requests的高级用法
# 高级用法 本篇文档涵盖了Requests的一些更加高级的特性. ## 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个Session实例发出的所有请求之间保持cookies. 会话对象 ...
- Requests库的文档高级用法
高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...
- 爬虫 requests模块高级用法
一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内 ...
- Python中第三方库Requests库的高级用法详解
Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...
随机推荐
- SSH面试题收藏
Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件2. 读取并解析映射信息,创建SessionFactory3. 打开Sesssion4. 创建事务Transation5. 持 ...
- spring 整合 spring mvc
需要进行 Spring 整合 SpringMVC 吗 ? 还是否需要再加入 Spring 的 IOC 容器 ? 是否需要再 web.xml 文件中配置启动 Spring IOC 容器的 Context ...
- C语言实现粒子群算法(PSO)一
最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等.当时是使用MATLAB来实现的,而 ...
- runtime作用
1.发送消息 方法调用的本质,就是让对象发送消息. objc_msgSend,只有对象才能发送消息,因此以objc开头. 使用消息机制前提,必须导入#import <objc/message.h ...
- 极路由访问Apple Store可以浏览但是不能下载的解决方案
最近在家里上网突然发现Apple Store不能更新了.重启路由器发现最开始一会是能下载更新的,但是过了一会就完全不能下载更新了.很是奇怪,今天特意分析了一下这个问题. 首先,抓包确定Apple St ...
- DELL vostro V5460 装mSATA 半高SSD硬盘后装win8.1系统
1.介绍 DELL vostro V5460的超极本性能虽然不是那么好,但的确是我觉得样子最好看的一款.满足了,轻,薄.如果是红色的,则很适合女生用. 2.缺点 这款笔记本最大的缺点,就是有的无线网卡 ...
- android view:布局优化
今天在图书馆看了一个android性能优化. 关于布局优化有几个小技巧: 1.尽量减少布局的嵌套,而使用相对布局,这样的话会减少布局对象的创建,并且可以再事件传递的时候减少传递嵌套. 2.使用incl ...
- 项目里的jquery.min.js错误
项目里的jquery.min.js报一系列 - Missing semicolon - Missing semicolon - Missing semicolon - Missing semicolo ...
- HttpContext.Current.User is null after installing .NET Framework 4.5
故障原因:从framework4.0到framework4.5的升级过程中,原有的form认证方式发生了变化,所以不再支持User.Identity.Name原有存储模式(基于cookie),要恢复这 ...
- 用python+selenium抓取微博24小时热门话题的前15个并保存到txt中
抓取微博24小时热门话题的前15个,抓取的内容请保存至txt文件中,需要抓取排行.话题和阅读数 #coding=utf-8 from selenium import webdriver import ...