会话对象

当你向同一主机发送多个请求时,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. SSH面试题收藏

    Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件2. 读取并解析映射信息,创建SessionFactory3. 打开Sesssion4. 创建事务Transation5. 持 ...

  2. spring 整合 spring mvc

    需要进行 Spring 整合 SpringMVC 吗 ? 还是否需要再加入 Spring 的 IOC 容器 ? 是否需要再 web.xml 文件中配置启动 Spring IOC 容器的 Context ...

  3. C语言实现粒子群算法(PSO)一

    最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等.当时是使用MATLAB来实现的,而 ...

  4. runtime作用

    1.发送消息 方法调用的本质,就是让对象发送消息. objc_msgSend,只有对象才能发送消息,因此以objc开头. 使用消息机制前提,必须导入#import <objc/message.h ...

  5. 极路由访问Apple Store可以浏览但是不能下载的解决方案

    最近在家里上网突然发现Apple Store不能更新了.重启路由器发现最开始一会是能下载更新的,但是过了一会就完全不能下载更新了.很是奇怪,今天特意分析了一下这个问题. 首先,抓包确定Apple St ...

  6. DELL vostro V5460 装mSATA 半高SSD硬盘后装win8.1系统

    1.介绍 DELL vostro V5460的超极本性能虽然不是那么好,但的确是我觉得样子最好看的一款.满足了,轻,薄.如果是红色的,则很适合女生用. 2.缺点 这款笔记本最大的缺点,就是有的无线网卡 ...

  7. android view:布局优化

    今天在图书馆看了一个android性能优化. 关于布局优化有几个小技巧: 1.尽量减少布局的嵌套,而使用相对布局,这样的话会减少布局对象的创建,并且可以再事件传递的时候减少传递嵌套. 2.使用incl ...

  8. 项目里的jquery.min.js错误

    项目里的jquery.min.js报一系列 - Missing semicolon - Missing semicolon - Missing semicolon - Missing semicolo ...

  9. HttpContext.Current.User is null after installing .NET Framework 4.5

    故障原因:从framework4.0到framework4.5的升级过程中,原有的form认证方式发生了变化,所以不再支持User.Identity.Name原有存储模式(基于cookie),要恢复这 ...

  10. 用python+selenium抓取微博24小时热门话题的前15个并保存到txt中

    抓取微博24小时热门话题的前15个,抓取的内容请保存至txt文件中,需要抓取排行.话题和阅读数 #coding=utf-8 from selenium import webdriver import ...