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使用起来让人实在感觉不好.它已经不适合现在的时代, ...
随机推荐
- IOC和Aop使用的扩展
下面还有静态代理和动态代理 1.构造注入 lib包: 在entity包下新建一个实体类User 代码: package cn.happy.entity; public class User { pri ...
- javascript学习之【new操作符】
首先请大家思考这么一段代码,如下: <script>var jquery=function(){ console.log(this);};jquery();new jquery() ...
- BZOJ 4521 手机号码
SB数位dp. 我的貌似要特判9999999999的情况. #include<iostream> #include<cstdio> #include<cstring> ...
- mysql5.7 慢查底里失败的原因
正确配置: log_output = FILEslow-query-log = on slow_query_log_file ="D:/MySQL5.7/data/slow ...
- BigDecimal
BigDecimal需要创建对象进行计算(用不同的方式做运算) BigDecimal num1 = new BigDecimal("5"): BigDecimal num2 = n ...
- Sql Server 数据分页
http://www.cnblogs.com/qqlin/archive/2012/11/01/2745161.html 1.引言 在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了 ...
- python 新旧类的问题
老式类就是经典类,不是继承自object类.在多继承时采用深度优先遍历父类.新式类就是基类继承自object类 class xxx(object).多继承时采用一种新的C3 算法来遍历父类.实例如下: ...
- web前端性能14条规则
14条规则 1.减少Http请求 使用图片地图 使用CSS Sprites 合并JS和CSS文件 这个是由于浏览器对同一个host有并行下载的限制,http请求越多,总体下载速度越慢 2.使用CDN( ...
- powerdesigner 生成mysql PDM 的COMMENT注释
1powerdesigner 生成mysql PDM 的COMMENT注释 默认的pd没有生成注释,针对mysql5.0可以如下修改.在Database-->edit Current DBMS. ...
- C#、js、json Datetime格式总结
在工作过程中遇到时间格式的数据在C#.js 和 json保存的不同结果,现在总结一下 JavaScript Parser: 1.数字型时间转字符串时间 如var data = "/Date( ...