requests-1快速学习
请直接转身官网http://docs.python-requests.org/zh_CN/latest/user/quickstart.html#url](http://docs.python-requests.org/zh_CN/latest/user/quickstart.html#url)
1.安装requests
pip install requests
2.发送请求
r = requests.get("https://api.github.com/events")
print('get:',r.url,r.status_code)
#data代表传入表单形式的数据
r = requests.post("http://httpbin.org/post",data = {'key':'vaule'})
print('post:',r.url,r.status_code)
r = requests.put("http://httpbin.org/put",data = {'key':'value'})
print('put:',r.url,r.status_code)
r = requests.delete('http://httpbin.org/delete')
print('delete:',r.url,r.status_code)
r = requests.head('http://httpbin.org/get')
print('head:',r.url,r.status_code)
r = requests.options('http://httpbin.org/get')
print('options',r.url,r.status_code)

3.传递URL参数
手工构建URL,将查询字符串组合到URL中。
对于带参数的URL,参数params是以dict的形式传入
import requests
r = requests.get("http://httpbin.org/get",params={'key1':'values1','key2':'value2'})
print("直接传递:", r.url, r.status_code)
search_word = {"wd":'廖雪峰'}
r = requests.get("https://www.baidu.com/s?",params=search_word)
print("间接传入:", r.url, r.status_code)
payload = {'key1':'value1', 'key2':['value2','value3']}
r = requests.get('http://www.httpbin.org/get', params=payload)
print("间接传入一个列表:", r.url, r.status_code)

4.响应内容
requests会自动解码来自服务器的内容。大多数unicode字符集都能被无缝的解码。
请求发出后,request会基于http头部对响应的编码作出推测。
import requests
r = requests.get('https://api.github.com/events')
print(r.text)
print('使用的编码类型:', r.encoding)
#指定编码类型
r.encoding = 'ISO-8859-1'

5.二进制响应内容
返回的非文本内容,可以保存为文件
import requests
r = requests.get('http://img1.bitautoimg.com/bitauto/2018/12/17/5ac08f3f-34cb-4eca-91d8-3cf688ca2ce5_630_w0@2x.jpg')
with open('bitauto.jpg','wb') as f:
f.write(r.content)
6.处理json数据
import requests
#json响应内容
r = requests.get('https://api.github.com/events')
print(r.json()[2])

如果json转码失败,会抛出异常
```#python
import requests
#json响应内容
r = requests.get('http://img1.bitautoimg.com/bitauto/2018/12/17/5ac08f3f-34cb-4eca-91d8-3cf688ca2ce5_630_w0@2x.jpg')
try:
print(r.json())
except ValueError as e:
print(e)
```

需要注意的是,成功调用 r.json() 并**不**意味着响应的成功。有的服务器会在失败的响应中包含一个 JSON 对象(比如 HTTP 500 的错误细节)。这种 JSON 会被解码返回。要检查请求是否成功,请使用 r.raise_for_status() 或者检查 r.status_code 是否和你的期望相同。
7.原始响应内容
import requests
#在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw。 如果你确实想这么干,那请你确保在初始请求中设置了 stream=True。具体你可以这么做
r = requests.get('https://api.github.com/events', stream=True)
print(r.raw)
#将文本流保存到文件
with open('text.html', 'wb') as f:
for i in r.iter_content(10):
f.write(i)

8.定制请求头
http://www.cnblogs.com/Joans/p/3956490.html
import requests
url = 'https://api.github.com/some/endpoint'
this_headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=this_headers)
注意: 定制 header 的优先级低于某些特定的信息源,例如:
- 如果在 .netrc 中设置了用户认证信息,使用 headers= 设置的授权就不会生效。而如果设置了 auth= 参数,
.netrc的设置就无效了。 - 如果被重定向到别的主机,授权 header 就会被删除。
- 代理授权 header 会被 URL 中提供的代理身份覆盖掉。
- 在我们能判断内容长度的情况下,header 的 Content-Length 会被改写。
更进一步讲,Requests 不会基于定制 header 的具体情况改变自己的行为。只不过在最后的请求中,所有的 header 信息都会被传递进去。
注意: 所有的 header 值必须是 string、bytestring 或者 unicode。尽管传递 unicode header 也是允许的,但不建议这样做。
9.更加复杂的post请求
data参数:可以发送一些编码为表单形式的数据
import requests
#传入一个字典
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
print(r.json()["form"])
#data传入一个元组列表,在表单中多个元素使用同一个key的时候适用
payload = (('key1', 'value1'), ('key1', 'value2'))
r = requests.post('http://httpbin.org/post', data=payload)
print(r.json()["form"])

非表单形式
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import requests,json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
#自行对dict进行编码
r = requests.post(url, data=json.dumps(payload))
print(r.text)
#使用json参数直接传递,会被自动编码
r = requests.post(url,data=payload)
print(r.text)

10.上传多部分编码文件
import requests
url = 'http://httpbin.org/post'
files = {'file': open('text.html','rb')}
r = requests.post(url,files=files)
print(r.text)

显式的设置文件名、文件类型和请求头
```#python
import requests
url = 'http://httpbin.org/post'
files = {'file':('text.html', open('text.html','rb'),'application/html',{'Expires':'0'})}
r = requests.post(url,files=files)
print(r.text)
```

传递一个字符串
```#python
import requests
url = 'http://httpbin.org/post'
files = {'file':'some,data,to,send\aanother,row,to,send\n'}
r = requests.post(url,files=files)
print(r.text)
```

警告
我们强烈建议你用二进制模式(binary mode)打开文件。这是因为 Requests 可能会试图为你提供 Content-Length header,在它这样做的时候,这个值会被设为文件的字节数(bytes)。如果用文本模式(text mode)打开文件,就可能会发生错误。
11.响应状态码
- 返回状态码 r.status_code
- 发送了错误请求4XX或者服务器响应错误5XX,使用r.raise_for_status抛出异常,没有异常,返回none
- 内置状态码查询对象r.status_code == requests.codes.ok
响应码为200的接口
import requests
r = requests.get('http://httpbin.org/get')
print('r.status_code:', r.status_code)
print('r.status_code == requests.codes.ok:',r.status_code == requests.codes.ok)
print(r.raise_for_status())

响应码为404的接口
```#python
import requests
r = requests.get('http://httpbin.org/status/404')
print("r.status_code: ",r.status_code)
print('r.raise_for_status():',r.raise_for_status())
```

12.响应头
http响应头对大小写不敏感
import requests
r = requests.get('http://httpbin.org/status/404')
print(r.headers)
print(r.headers['content-type'])
print(r.headers.get('Content-Type'))

13.Cookie
如果某个响应中包含一些cookie,可以快速访问它们
import requests
url = 'http://example.com/some/cookie/setting/url'
r = requests.get(url)
print(r.cookies)

发送cookies到服务器
```#python
import requests
url = 'http://httpbin.org/cookies'
#传入cookies_param
cookies_param = dict(cookies_are='working')
cookies_param['one']='hello'
r = requests.get(url, cookies=cookies_param)
print('直接传入cookie1:',r.text)
#传入cookie_param
cookies_param = {'one':'hello','two': 'world','another':'runoob'}
r = requests.get(url,cookies=cookies_param)
print('直接传入cookie2:',r.text)
```

Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:
```#python
import requests
jar = requests.cookies.RequestsCookieJar()
jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
url = 'http://httpbin.org/cookies'
r = requests.get(url, cookies=jar)
print(r.text)
```

14.重定向与请求历史
默认情况下,除了 HEAD, Requests 会自动处理所有重定向。
GET、OPTIONS、POST、PUT、PATCH 或者 DELETE,自动允许重定向处理;HEAD,自动禁止重定向:
使用allow_redirects参数可以启动或禁止重定向。
Response.history 是一个 Response 对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。
import requests
#GitHub将所有的http请求重定向到https
r = requests.get("http://github.com")
print(r.url)
print(r.status_code)
print(r.history)

import requests
#GitHub将所有的http请求重定向到https
r = requests.get("http://github.com", allow_redirects=False)
print(r.url)
print(r.status_code)
print(r.history)

```#python
import requests
#GitHub将所有的http请求重定向到https
r = requests.head("http://github.com", allow_redirects=True)
print(r.url)
print(r.status_code)
print(r.history)
```

15.超时
requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:
timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时
import requests
r = requests.get("http://github.com", timeout=0.001)

16.错误与异常
遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。
如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。
若请求超时,则抛出一个 Timeout 异常。
若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。
所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException 。
requests-1快速学习的更多相关文章
- 60分钟Python快速学习(给发哥一个交代)
60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空 ...
- LinqPad工具:帮你快速学习Linq
LinqPad工具:帮你快速学习Linq 参考: http://www.cnblogs.com/li-peng/p/3441729.html ★:linqPad下载地址:http://www.linq ...
- 快速学习C语言一: Hello World
估计不会写C语言的同学也都听过C语言,从头开始快速学一下吧,以后肯定能用的上. 如果使用过其它类C的语言,如JAVA,C#等,学C的语法应该挺快的. 先快速学习并练习一些基本的语言要素,基本类型,表达 ...
- 【Java线程池快速学习教程】
1. Java线程池 线程池:顾名思义,用一个池子装载多个线程,使用池子去管理多个线程. 问题来源:应用大量通过new Thread()方法创建执行时间短的线程,较大的消耗系统资源并且系统的响应速度变 ...
- 【Java的JNI快速学习教程】
1. JNI简介 JNI是Java Native Interface的英文缩写,意为Java本地接口. 问题来源:由于Java编写底层的应用较难实现,在一些实时性要求非常高的部分Java较难胜任(实时 ...
- 快速学习bootstrap前台框架
W3c里的解释 使用bootstrap需要注意事项 1. 在html文件第一行要加上<!doctype html>[s1] 2. 导入bootstrap.min.css文件 3. 导 ...
- C#快速学习笔记(译)
下面是通过代码快速学习C#的例子. 1.学习任何语言都必定会学到的hello,world! using System; public class HelloWorld { public static ...
- Dapper快速学习
Dapper快速学习 我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dap ...
- ASP.NET快速学习方案(.NET菜鸟的成长之路)
想要快速学习ASP.NET网站开发的朋友可以按照下面这个学习安排进度走.可以让你快速入门asp.net网站开发!但也局限于一般的文章类网站!如果想学习更多的技术可以跟着我的博客更新走!我也是一名.NE ...
- 60分钟Python快速学习(转)
60分钟Python快速学习(给发哥一个交代) 阅读目录 第一步:开发环境搭建: 第一个Python功能:初识Python 02.Python中定义变量不需要数据类型 03.在Pythod中定义方法 ...
随机推荐
- HTML项目总结
一些存在的可以改进的地方: 达到一个效果不必要墨守成规,比如:
- ACCESS表的视图
ACCESS表的视图 点击: 发布日期:2007-8-31 6:37:00 进入论坛 表是关系型数据库的基本结构.在Access中,表是一种关系特定主题的数据集合,如产品.供应商等.为 ...
- Pr学习日记
1.http://tieba.baidu.com/p/4102775256 2.素才,编辑制作视频,视频输出 3. 启用新建保存: 启用:双击 新建项目:名称(第一节课),位置 ...
- java反射机制的作用与优点
java的反射机制就是增加程序的灵活性,避免将程序写死到代码里,例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码, ...
- 记录几个ubuntu环境下的php相关的路径
php路径 /usr/bin/php phpize5 /usr/bin/phpize5 php5-fpm /usr/sbin/php5-fpm php所有的配置文件 /etc/php5/fpm 重启p ...
- jquery中not的用法[.not(selector)]
描述: 从匹配的元素集合中移除指定的元素. 如果提供的jQuery对象代表了一组DOM元素,.not()方法构建一个新的匹配元素的jQuery对象,用于存放筛选后的元素.所提供的选择器是对每个元素进行 ...
- java企业级开发的实质就是前台后台如何交互的-各个对象之间如何交互,通信的-程序执行的流程是怎样的
1.开山鼻祖-servlet 如何将url 和 strvlet(.java文件)联系起来的 顺平说的:在xml中,url先找到xml,由对应的url的得到servlet那个类,然后就可以输入一个网址访 ...
- smarty学习——组合修改器
对于同一个变量,你可以使用多个修改器.它们将从左到右按照设定好的顺序被依次组合使用. 使用时必须要用"|"字符作为它们之间的分隔符. 比如: {#userinfoname#} {# ...
- FastAdmin 开发环境详细设置
一图胜千言 FastAdmin开发环境 Windows 网页安装 鼠标点点就可以了,不用说明. 命令行安装 环境准备 装有 Windows 7 的PC .(这是一句废话,不用理这句.) 服务器软件 A ...
- Composer 技巧(以 FastAdmin 项目为基础)(2018-12-25 更新)
Composer 技巧(以 FastAdmin 项目为基础) 查看 FastAdmin 所有的已安装的 php 组件,如果不加 i 就是查看 composer.json 里的组件. composer ...