写给朋友的 Python知识点,Python requests 模块

1. Python requests 模块介绍

Python requests 模块是一个第三方的 HTTP 库,用于向 Web 服务器发送 HTTP 请求。它是 Python 标准库中 urllib 的优雅封装。

requests 模块的特点有:

基于 HTTP 协议,支持 GET、POST、PUT、DELETE 等常用的请求方式。

完美支持 HTTP/1.0 和 HTTP/1.1。

自动处理 cookie。

支持 SSL/TLS。

提供了丰富的请求头和响应头信息。

支持上传和下载文件。

支持会话(Session)和连接池(Connection Pool)功能。

requests 模块安装命令:

pip install requests

2. 发送 GET 请求

发送 GET 请求可以使用 requests.get 方法。

2.1 基本用法

import requests

url = 'https://api.github.com'

response = requests.get(url)

print(response.status_code)

print(response.text)

以上代码使用 requests.get 方法向 Github API 发出了一个 GET 请求,获取了 Github API 的响应,其中 status_code 属性的值为响应的状态码,text 属性的值为响应的文本内容。

2.2 带参数的 GET 请求

在发送 GET 请求时可以使用 params 参数向 URL 中添加查询参数。

import requests

url = 'https://api.github.com/search/repositories'

params = {'q': 'python'}

response = requests.get(url, params=params)

print(response.status_code)

print(response.json())

以上代码使用 params 参数向 Github API 的搜索接口添加了查询参数 q=python,获取了查询结果的响应,其中 json() 方法将响应的 JSON 字符串解码成 Python 字典。

3. 发送 POST 请求

发送 POST 请求可以使用 requests.post 方法。

3.1 基本用法

import requests

url = 'https://httpbin.org/post'

data = {'name': 'Tom', 'age': 18}

response = requests.post(url, data=data)

print(response.status_code)

print(response.text)

以上代码使用 data 参数对请求体进行了编码,并发送了一个 POST 请求,其中 url 是请求的 URL,data 是请求体的内容,response 是响应的对象。

3.2 带文件的 POST 请求

在发送 POST 请求时可以使用 files 参数向请求体中添加文件。

import requests

url = 'https://httpbin.org/post'

files = {'file': open('example.txt', 'rb')}

response = requests.post(url, files=files)

print(response.status_code)

print(response.text)

以上代码使用 files 参数向请求体中添加了一个名为 file 的文件对象,发送了一个 POST 请求。

4. 请求头和响应头

requests 模块支持自定义请求头和获取响应头。

4.1 自定义请求头

在发送请求时可以使用 headers 参数向请求中添加自定义请求头。

import requests

url = 'https://api.github.com'

headers = {'User-Agent': 'Mozilla/5.0'}

response = requests.get(url, headers=headers)

print(response.status_code)

print(response.headers)

以上代码使用 headers 参数向请求中添加了一个 User-Agent 请求头,发送了一个 GET 请求,并获取了响应的头信息。

4.2 获取响应头

在获取响应时可以使用 headers 属性获取响应头。

import requests

url = 'https://api.github.com'

response = requests.get(url)

print(response.status_code)

print(response.headers['Content-Type'])

以上代码获取了响应头中的 Content-Type 属性。

5. 处理异常

在发送请求时可能会发生一些异常,例如网络连接异常、请求超时等。requests 模块内置了一些异常类型,可以用于处理这些异常。

5.1 网络连接异常

可以使用 requests.exceptions.ConnectionError 类捕获网络连接异常。

import requests

try:

response = requests.get('https://www.google.com/404')

response.raise_for_status()

except requests.exceptions.ConnectionError as e:

print(e)

except requests.exceptions.HTTPError as e:

print(e)

以上代码使用 raise_for_status() 方法判断响应是否出错,如果出错则会引发 HTTPError 异常。

5.2 请求超时异常

可以使用 requests.exceptions.Timeout 类捕获请求超时异常。

import requests

try:

response = requests.get('https://www.google.com/', timeout=0.1)

except requests.exceptions.Timeout as e:

print(e)

以上代码使用 timeout 参数设置请求超时时间为 0.1 秒。

6. 会话(Session)和连接池(Connection Pool)

requests 模块支持会话(Session)和连接池(Connection Pool)两种功能。

6.1 会话(Session)

可以使用 requests.Session 类创建一个会话,可以在一系列请求中共享数据,例如 cookie、HTTP 头信息等。

import requests

session = requests.Session()

session.get('https://httpbin.org/cookies/set?name=value')

response = session.get('https://httpbin.org/cookies')

print(response.status_code)

print(response.json())

以上代码创建了一个会话,并在该会话中发送了两个 GET 请求,第一个请求设置了 cookie,第二个请求获取了 cookie。

6.2 连接池(Connection Pool)

可以使用 requests.adapters.HTTPAdapter 类创建一个连接池,可以复用已经建立的连接,从而提高性能。

import requests

session = requests.Session()

adapter = requests.adapters.HTTPAdapter(pool_connections=100, pool_maxsize=100)

session.mount('http://', adapter)

response = session.get('http://www.baidu.com')

print(response.status_code)

以上代码使用 HTTPAdapter 类创建了一个连接池,设置了最大连接数和最大连接数限制,并将其与会话进行绑定,实现了连接复用的功能。

后端开发标签