会话对象

当你向同一主机发送多个请求时,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高级用法的更多相关文章

  1. 爬虫—Requests高级用法

    Requests高级用法 1.文件上传 我们知道requests可以模拟提交一些数据.假如有的网站需要上传文件,我们也可以用requests来实现. import requests files = { ...

  2. python requests 高级用法

    高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...

  3. (转)python requests 高级用法 -- 包括SSL 证书错误的解决方案

    我在使用requests访问某个https网站时出现错误  error::SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify fai ...

  4. 爬虫之requests 高级用法

    1. 文件上传 import requests files = {'file': open('favicon.ico', 'rb')} r = requests.post("http://h ...

  5. python requests 高级用法 -- 包括SSL 证书错误的解决方案

    Session Objects会话对象 Session对象在请求时允许你坚持一定的参数.此外,还坚持由Session实例的所有请求的cookie. 让我们坚持在请求时使用 s = requests.S ...

  6. Python之Requests的高级用法

    # 高级用法 本篇文档涵盖了Requests的一些更加高级的特性. ## 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个Session实例发出的所有请求之间保持cookies. 会话对象 ...

  7. Requests库的文档高级用法

    高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...

  8. 爬虫 requests模块高级用法

    一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内 ...

  9. Python中第三方库Requests库的高级用法详解

    Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...

随机推荐

  1. SQL SERVER 2008 r2安装失败之Integration Service

    因工作需要,遂把以前的2008升级到r2,升级失败,具体原因忘了,卸载2008,清了注册表删了文件,结果安装的时候失败了,如下图: 下一步-有错误日志和错误的序列号,错误日志在C:\Program F ...

  2. 静态变量static和extern外引用

    静态变量--加static关键字的变量,特点: (1)在全局数据区中分配内存,每次对其值得修改都会保留结果,直至程序结束. (2)若静态变量没显示初始化,那会被自动初始化为0,并且只能初始化一遍. 1 ...

  3. SRS文档

    1什么是用例? 在介始用例方法之前,我们首先来看一下传统的需求表述方式-"软件需求规约"(Software Requirement Specification).传统的软件需求规约 ...

  4. 学习SVG系列(5):SVG渐变

    SVG渐变 渐变是一种从一种颜色到另一种颜色的平滑过渡,可以把多个颜色的过渡应用到同一个元素. 渐变有两种: Linear Redial 线性渐变-<linearGradient> lin ...

  5. 自动化工具selenium

    selenium web 自动化工具 selenium 不仅仅可以做web自动化,还可以考虑用于爬虫 java.python..net都可使用,具体使用方法google 构建Python+Seleni ...

  6. C语言格式化输入不定长数组

    先随便写写,有空再整理. 直接贴代码 #include <stdio.h> #include <stdlib.h> //从一行标准输入中格式化输入一个不定长数组 void in ...

  7. 关于Webstorm的一些配置

    一:代码缩略图插件:CodeGlance: 二:皮肤与主题使用的sublime的系列风格. 三:实现内嵌JS代码的高亮显示.https://segmentfault.com/q/10100000024 ...

  8. xp下安装jdk8

    下载jdk8安装包,地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载7- ...

  9. meta头部标签意义作用!

    1.<meta name="viewport" id="viewport" content="width=device-width, initi ...

  10. Memcache所有方法及参数详解

    memcache函数所有的方法列表如下: 参考http://www.php.net/manual/zh/function.Memcache-add.php Memcache::add - 添加一个值, ...