安装requests

安装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

  

猜你喜欢

转载自www.cnblogs.com/canglongdao/p/13363702.html