requests是一个用于发送HTTP请求的Python库。
它用Python语言编写,基于urllib3,采用Apache2 Licensed开源协议。它比Python内置的urllib模块更加方便,可以节约大量的工作,完全满足HTTP测试需求。
Requests库可以用代码来模拟发送网络请求,并得到响应的数据。
说明:urllib和urllib3有什么关系
urllib和urllib3是两个不同的Python库,用于处理HTTP请求。
urllib是Python的标准库之一,用于打开和读取URLs。在Python2中,urllib主要由两个模块组成:urllib和urllib2。在Python3中,这两个模块被合并为一个urllib模块。
urllib3是一个第三方库,它提供了更多功能和更好的API来处理HTTP请求。它包括连接池管理、HTTP/HTTPS请求、重试等高级功能。urllib3可以与Python的标准库中的urllib模块一起使用,以提供更多的功能和更好的性能。
总的来说,urllib是Python的标准库,而urllib3是一个第三方库,提供了更多高级功能和更好的API。两者可以互相补充,根据需要选择使用。
一、开发接口
这部分文档包含了 Requests 所有的接口。对于 Requests 依赖的外部库部分,我们在这里介绍最重要的部分,并提供了规范文档的链接。
主要接口
Requests 所有的功能都可以通过以下 7 个方法访问。它们全部都会返回一个 Response 对象的实例。
1个通用HTTP请求方法:requests.request()
1个请求头部信息方法:requests.head()
5个不同类型HTTP请求方法:GET(获取数据)、POST(提交数据)、PUT(更新数据)、PATCH(部分更新数据)、DELETE(删除数据)
1、requests.request(method, url, **kwargs)
构造并发送HTTP请求。
requests.requests是requests库中的一个通用的HTTP请求方法,它可以发送各种类型的HTTP请求(GET、POST、PUT等)。
参数:
method : Request请求对象的HTTP请求方法,字符串类型,GET、POST、PUT、PATCH、DELETE。
url: 请求的目标URL,字符串类型。
**kwargs: 可选的关键字参数,包括以下常见参数(后面方法也可用)
params : URL中的查询参数,字典或字节流序列。
data: 请求正文中的数据,通常用于POST请求,字典或字节序列。
json : 发送JSON格式的数据,通常用于POST请求。
headers: HTTP头部,字典类型。
cookie: 发送的cookies,字典或CookieJar。
files: 用于上传文件。可以通过这个参数向服务器发送文件。它是一个字典,其中键是字段名,值是包含文件数据的元组或文件对象。
auth: HTTP认证信息,元组,比如('username','password')。
timeout: 请求超时时间,单位为秒。.
allow_redirects : 是否允许重定向,布尔值,默认为True。.
proxies : 代理设置,字典类型。
verify: 用于控制是否验证SSL证书,默认为True。
stream: 用于控制是否立即下载响应内容,如果为False则响应内容会被立刻下载。
cert: 用于指定客户端证书的路径。如果服务器要求客户端提供证书,你可以通过cert参数指定证书文件的路径。
返回:Response object
返回类型:requests.Response
例:
>>> import requests
>>> req = requests.request('GET', 'http://httpbin.org/get')
<Response [200]>
2、requests.head(url, **kwargs)
用于发送head请求到指定的URL。
HEAD请求类似于GET请求,但是服务器在响应中只返回HTTP头部,而不返回实际的数据体。
使用requests.head()方法可以帮助你检查URL的有效性、获取资源的大小等信息,而不需要实际下载整个资源。
参数:
url: 请求的目标URL,字符串类型。
**kwargs: 可选的关键字参数
返回:Response object
返回类型:requests.Response
例:
import requests
response = requests.head('https://www.example.com')
print(response.status_code) # 输出状态码
for key, value in response.headers.items(): # 输出头部信息
print(f"{key}: {value}")
输出:
Status Code: 200
Response Headers:
Content-Encoding: gzip
Accept-Ranges: bytes
Age: 602011
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Fri, 29 Dec 2023 08:39:39 GMT
Etag: "3147526947"
Expires: Fri, 05 Jan 2024 08:39:39 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (sac/2552)
X-Cache: HIT
Content-Length: 648
3、requests.get(url, params=None, **kwargs)
用于发送GET请求到指定的URL。
GET请求通常用于从服务器获取数据,如下载数据,获取网站源码等。
这个方法返回一个响应对象(Response),你可以从中获取各种信息,例如状态码、响应体等。
参数:
url: 请求的目标URL,字符串类型。
params: 可选的字典,用于添加查询参数。
**kwargs: 可选的关键字参数
返回:Response object
返回类型:requests.Response
例:
import requests
url = 'https://www.example.com'
params = {'key1': 'value1', 'key2': 'value2'}
headers = {'User-Agent': 'my-app/0.0.1'}
# 发送 GET 请求
response = requests.get(url, params=params, headers=headers)
# 检查响应信息
print(f"Status Code: {response.status_code}")
print(f"Content:\n{response.text}")
输出:
Status Code: 200
Content:<!doctype html>......略
4、requests.post(url, data=None, json=None, **kwargs)
用于发送POST请求到指定的URL。
POST请求通常用于向服务器提交数据,如提交用户名和密码来登陆网站、使用file参数上传文件到服务器等。
参数:
url:要请求的URL。
data:可选的字典或bytes-like对象,用于添加表单数据。
json:可选的字典,用于添加JSON数据。如果提供了json参数,则不会将data参数解析为表单数据。
返回:Response object
返回类型:requests.Response
例1:登陆网站
import requests
url = 'https://example.com/login'
data = {'username': 'your_username', 'password': 'your_password'}
response = requests.post(url, data=data)
if response.status_code == 200:
print('登录成功!')
# 可以在这里进行其他操作,例如获取用户个人信息等
# 状态码 == 200只代表服务器成功响应了请求,是否成功登陆还要根据从服务器返回的信息中是否包含实际成功登陆时的某些特定信息来确定。
else:
print('登录失败!')
例2:上传文件到网站
import requests
url = 'https://example.com/upload'
file_path = '/path/to/file.txt'
with open(file_path, 'rb') as file:
files = {'file': ('file.txt', file, 'text/plain')}
response = requests.post(url, files=files)
if response.status_code == 200:
print('文件上传成功!')
else:
print('文件上传失败!')
5、requests.put(url, data=None, **kwargs)
用于发送PUT请求到指定的URL。
PUT请求用于对已知资源进行更新。
参数:
url:要请求的URL,字符串类型。
data:可选的字典、字符串或bytes-like对象,用于添加表单数据。
json:可选的字典,用于添加JSON数据。如果提供了json参数,则不会将data参数解析为表单数据。
**kwargs: 可选的关键字参数
返回:Response object
返回类型:requests.Response
例:
import requests
url = 'https://www.example.com/resource/123'
data = {'key1': 'new_value1', 'key2': 'new_value2'}
headers = {'User-Agent': 'my-app/0.0.1'}
# 发送 PUT 请求
response = requests.put(url, data=data, headers=headers)
# 检查响应信息
print(f"Status Code: {response.status_code}")
print(f"Content:\n{response.text}")
6、requests.patch(url, data=None, **kwargs)
用于发送PATCH请求到指定URL。
PATCH请求通常用于对服务器上的资源进行部分更新。
参数:
url:要请求的URL,字符串类型。
data:可选的字典、字符串或bytes-like对象,用于添加表单数据。
json:可选的字典,用于添加JSON数据。如果提供了json参数,则不会将data参数解析为表单数据。
**kwargs: 可选的关键字参数
返回:Response object
返回类型:requests.Response
例:
import requests
data = {'key': 'value'}
response = requests.patch('https://www.example.com/resource', data=data)
print(response.status_code) # 输出状态码
print(response.text) # 输出响应体内容
7、requests.delete(url, **kwargs)
用于发送DELETE请求到指定的URL。
DELETE请求通常用于删除服务器上的资源。
参数:
url:要请求的URL,字符串类型。
**kwargs: 可选的关键字参数
返回:Response object
返回类型:requests.Response
例:
import requests
response = requests.delete('https://www.example.com/resource')
print(response.status_code) # 输出状态码
print(response.text) # 输出响应体内容
下一篇详细介绍requests.Session()对象方法及参数。Session()提供一种持久性的会话,允许在多个请求之间保持cookie、header和连接池等配置参数的共享,这样可以重用同一连接,而不是为每个请求创建一个新的连接。