目录
Requests 简介
Requests 是一个用于发送 HTTP 请求的 Python 库,旨在让 HTTP 请求变得更加简单和优雅。与传统的 Python 标准库 urllib
相比,Requests 提供了更加人性化的 API,使得处理 HTTP 请求变得更加直观和方便。以下是 Requests 的一些主要特点:
- 支持所有主流的 HTTP 请求方法(GET、POST、PUT、DELETE 等)。
- 提供简单的 API 来处理 URL 参数、请求头、请求体等。
- 自动处理 Cookies 和会话。
- 支持文件上传和下载。
- 内置 SSL 证书验证功能。
- 提供简单的错误处理机制。
安装 Requests
在开始使用 Requests 之前,需要先安装该库。可以使用 pip
来安装:
pip install requests
安装完成后,可以通过以下方式来导入 Requests 库:
import requests
发送 HTTP 请求
Requests 支持所有主流的 HTTP 请求方法。以下是一些常见的请求方法及其示例。
GET 请求
GET 请求用于从服务器获取数据。以下是一个简单的 GET 请求示例:
import requests
response = requests.get('https://api.github.com')
print(response.status_code)
print(response.text)
在上述代码中,requests.get
方法用于发送 GET 请求,response
对象包含了服务器的响应。
POST 请求
POST 请求用于向服务器发送数据。以下是一个简单的 POST 请求示例:
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', data=payload)
print(response.status_code)
print(response.text)
在上述代码中,requests.post
方法用于发送 POST 请求,data
参数用于传递请求体数据。
其他 HTTP 请求
除了 GET 和 POST 请求,Requests 还支持其他 HTTP 请求方法,如 PUT、DELETE、HEAD 等。以下是一个 PUT 请求的示例:
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.put('https://httpbin.org/put', data=payload)
print(response.status_code)
print(response.text)
请求参数
在发送 HTTP 请求时,可以传递各种参数来定制请求,如 URL 参数、请求头、请求体等。
URL 参数
URL 参数(查询字符串)可以通过 params
参数来传递。以下是一个示例:
import requests
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.status_code)
print(response.url)
print(response.text)
请求头
可以通过 headers
参数来设置自定义的请求头。以下是一个示例:
import requests
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('https://httpbin.org/get', headers=headers)
print(response.status_code)
print(response.text)
请求体
对于 POST、PUT 等请求,可以通过 data
或 json
参数来传递请求体数据。以下是一个示例:
import requests
# 传递表单数据
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', data=payload)
print(response.status_code)
print(response.text)
# 传递 JSON 数据
json_payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', json=json_payload)
print(response.status_code)
print(response.text)
处理响应
在发送请求后,可以通过 response
对象来处理服务器的响应。
响应内容
可以通过 response.text
获取响应的文本内容,通过 response.json
获取 JSON 格式的响应内容。以下是一个示例:
import requests
response = requests.get('https://api.github.com')
print(response.text) # 获取文本内容
print(response.json()) # 获取 JSON 内容
响应状态码
可以通过 response.status_code
获取响应的状态码。以下是一个示例:
import requests
response = requests.get('https://api.github.com')
print(response.status_code)
响应头
可以通过 response.headers
获取响应头。以下是一个示例:
import requests
response = requests.get('https://api.github.com')
print(response.headers)
高级用法
Requests 提供了许多高级功能,如会话对象、文件上传、超时设置和 SSL 证书验证等。
会话对象
会话对象用于在多次请求之间保持某些参数,如 Cookies。以下是一个示例:
import requests
session = requests.Session()
session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
response = session.get('https://httpbin.org/cookies')
print(response.text)
文件上传
可以通过 files
参数来上传文件。以下是一个示例:
import requests
files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.status_code)
print(response.text)
超时设置
可以通过 timeout
参数来设置请求的超时时间。以下是一个示例:
import requests
try:
response = requests.get('https://httpbin.org/delay/3', timeout=2)
print(response.status_code)
except requests.Timeout:
print('请求超时')
SSL 证书验证
Requests 默认会验证 SSL 证书,可以通过 verify
参数来禁用此功能。以下是一个示例:
import requests
response = requests.get('https://expired.badssl.com/', verify=False)
print(response.status_code)
错误处理
Requests 提供了简单的错误处理机制,可以通过捕获异常来处理请求错误。以下是一个示例:
import requests
try:
response = requests.get('https://httpbin.org/status/404')
response.raise_for_status() # 如果响应状态码不是 200,会抛出 HTTPError 异常
except requests.HTTPError as e:
print(f'HTTP error occurred: {e}')
except Exception as e:
print(f'Other error occurred: {e}')
else:
print('Success!')
实战案例
抓取网页数据
以下是一个抓取网页数据的示例:
import requests
from bs4 import BeautifulSoup
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.title.text)
调用 REST API
以下是一个调用 REST API 的示例:
import requests
url = 'https://api.github.com/users/octocat'
response = requests.get(url)
data = response.json()
print(data['name'])
print(data['public_repos'])
总结
本文详细介绍了 Python 中 Requests 库的使用方法和一些高级技巧。Requests 库是一个非常强大的 HTTP 请求工具,提供了简洁和人性化的 API,使得处理 HTTP 请求变得更加简单和直观。希望本文能帮助读者更好地理解和掌握 Requests 库,解决在实际开发中遇到的问题。如果你有任何疑问或需要进一步的帮助,欢迎随时联系我。