安装requests;pip install requests
发送请求
import requests#导入requests模块 r=requests.get("https://www.baidu.com/")#获取某个网页 print(r)
传递URL参数
requests允许你使用params关键字参数,以一个字符串字典来提供这些参数。(params应该是第2个参数,也可以使用位置参数方式来传值)
打印出该URL;r.url
读取服务器响应的内容;r.text
请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。当你访问r.text之时,Requests会使用其推测的文本编码,你可以找出Requests使用了什么编码,并且能够使用r.encoding属性来改变它。
r.encoding=‘??‘
二进制响应内容 r.content
你也能以字节的方式访问请求响应体,对于非文本请求;
Requests会自动为你解码gzip和deflate传输编码的响应数据。
JSON响应内容
Requests中也有一个内置的JSON解码器,助你处理JSON数据;
如果JSON解码失败,r.json()就会抛出一个异常。
原始响应内容 r.raw
请你确保在初始请求中设置了stream=True.
定制请求头
如果你想为请求添加HTTP头部,只要简单地传递一个dict给headers参数就可以了。
注意:定制header的优先级低于某些特定的信息源。
更加复杂的POST请求
通常,你想要发送一些编码为表单形式的数据——非常像一个HTML表单。要实现这个,只需简单地传递一个字典给data参数。你的数据字典在发出请求时会自动编码为表单形式。
data参数传入一个元组列表。在表单中多个元素使用同一key的时候,这种方式尤其有效。
很多时候你想要发送的数据并非编码为表单形式的。如果你传递一个string而不是一个dict,那么数据会被直接发布出去。
import requests import json url=‘https://api.github.com/some/endpoint‘ a={‘some‘:‘data‘} #r=requests.post(url,data=json.dumps(a))#传递参数为string, r=requests.post(url,json=a)#使用json参数,会自动编码
POST一个多部分编码(Multipart-Encoded)的文件
Requests使得上传多部分编码文件变得很简单;
你可以显式地设置文件名,文件类型和请求头:
import requests url=‘http://httpbin.org/post‘ a={‘filess‘:(‘a.txt‘,open(‘a.txt‘,‘rb‘),‘application/vnd.ms-excel‘, {‘Expires‘: ‘0‘})} rs=requests.post(url,files=a) print(rs.text)
"files": {
"filess": "hehe\r\nxixi\r\ngaga"
},
如果你想,你也可以发送作为文件来接收的字符串:
响应状态码
我们可以检测响应状态码
为方便引用,Requests还附带了一个内置的状态码查询对象。
如果发送了一个错误请求(一个4XX客户端错误,或者5XX服务器错误响应),我们可以通过Response.raise_for_status()来抛出异常;
rs的status_code是200, 我们调用raise_for_status()时,得到的是None;
响应头
我们可以查看一个Python字典形式展示的服务器响应头;
但是这个字典比较特殊,它是仅为HTTP头部而生的。根据 RFC 2616, HTTP 头部是大小写不敏感的。
因此,我们可以使用任意大写形式来访问这些响应头字段:
它还有一个特殊点,那就是服务器可以多次接受同一 header,每次都使用不同的值。但 Requests 会将它们合并,这样它们就可以用一个映射来表示出来
Cookie
如果某个响应中包含一些cookie,你可以快速访问他们;
要想发送你的cookie到服务器,可以使用cookies参数;
Cookie的返回对象为RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以吧Cookie Jar传到Requests中。
重定向与请求历史
默认情况下,除了HEAD,Requests会自动处理所有重定向。
可以使用响应对象的history方法来追踪重定向。
Response.history是一个Response对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。
如果你使用的是GET、OPTIONS、POST 、PUT、PATCH或者DELETE,那么你可以通过allow_redirects参数禁用重定向处理;
如果你使用了HEAD,你也可以启用重定向;
超时
你可以告诉requests在经过以timeout参数设定的描述事件之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:
注意
timeout
仅对连接过程有效,与响应体的下载无关。 timeout
并不是整个下载响应的时间限制,而是如果服务器在 timeout
秒内没有应答,将会引发一个异常(更精确地说,是在 timeout
秒内没有从基础套接字上接收到任何字节的数据时)If no timeout is specified explicitly, requests do not time out.
错误与异常
遇到网络问题(如:DNS查询失败、拒绝连接等)时,Requests会抛出一个ConnectionError异常。
如果HTTP请求返回了不成功的状态码,Response.raise_for_status()会抛出一个HTTPError异常。
若请求超时,则抛出一个Timeout异常。
若请求超过了设定的最大重定向次数,则会抛出一个TooManyRedirects异常。
所有Requests显示抛出的异常都继承自requests.exceptions.RequestException。
参考:https://requests.readthedocs.io/zh_CN/latest/user/quickstart.html
原文:https://www.cnblogs.com/canglongdao/p/13363702.html