Python requests库
Python requests 库使用
1. 基本用法
1.1 发送 GET 请求
import requests
response = requests.get('https://example.com')
print(response.status_code) # HTTP 状态码
print(response.text) # 响应内容
1.2 发送 POST 请求
import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://example.com/api', data=data)
print(response.status_code)
print(response.json()) # 如果响应是JSON格式
1.3 使用 json 参数发送 JSON 数据
import requests
json_data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://example.com/api', json=json_data)
print(response.status_code)
print(response.json())
1.4 自定义请求头
headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://example.com', headers=headers)
print(response.status_code)
1.5 发送带参数的 GET 请求
params = {'q': 'python', 'page': 2}
response = requests.get('https://example.com/search', params=params)
print(response.url) # 完整的 URL,包括参数
1.6 文件上传
files = {'file': open('report.txt', 'rb')}
response = requests.post('https://example.com/upload', files=files)
print(response.status_code)
2. 响应处理
response.text: 返回响应的文本内容。response.json(): 将响应内容作为 JSON 解析。response.content: 返回二进制响应内容,适用于下载文件等情况。
3. 进阶用法
3.1 流式请求
适用于处理大文件下载。
response = requests.get('https://example.com/largefile', stream=True)
with open('largefile', 'wb') as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
3.2 超时控制
response = requests.get('https://example.com', timeout=5)
3.3 会话保持
会话保持(Session Persistence)指的是在多个请求之间保存会话信息,以便能够持续共享如 cookies、认证信息等状态。通常情况下,每次发送 HTTP 请求时,服务器会视每个请求为独立的,即使请求来自同一客户端,服务器默认不会跟踪之前的请求状态。
为什么需要会话保持?
在某些情况下,你需要多个请求共享相同的状态。例如,登录后的请求可能依赖于会话中的 cookies 来保持用户的登录状态。如果每个请求都是独立的,那么你每次都需要重新登录。
通过会话保持,多个请求之间可以共享一些信息,比如:
- Cookies:用于认证的会话 cookie,可以跨多个请求保持。
- 请求头(Headers):比如自定义的身份验证头可以保持一致。
- 参数(Parameters):例如,多个请求共享相同的 API 密钥或身份标识符。
requests.Session 用法
requests.Session 对象提供了一种机制来保持会话状态。它会在多个请求之间自动携带相关的 cookies 和 headers。
示例:使用会话保持登录状态
假设你有一个网站需要登录才能访问其他页面
import requests
# 创建一个 Session 对象
session = requests.Session()
# 登录请求,发送 POST 数据
login_data = {'username': 'myusername', 'password': 'mypassword'}
session.post('https://example.com/login', data=login_data)
# 现在已经登录了,后续的请求会自动携带登录的 cookies
response = session.get('https://example.com/dashboard')
print(response.text) # 输出登录后的页面
在这个例子中:
session.post执行登录操作,服务器返回的会话 cookies 被保存在session对象中。session.get之后的请求会自动携带这些 cookies,使得服务器能够识别这是同一个登录用户。
会话保持的优势
- 自动携带 cookies:不需要手动管理每个请求的 cookies。
- 节省资源:可以复用连接,提高请求效率。
- 保持认证状态:登录后的每个请求自动带上凭证,避免重复登录。
复用自定义请求头
在使用 requests.Session 时,不仅可以复用 cookies,还可以复用任何你希望在多个请求中保持一致的请求头(headers),例如 X-Token。requests.Session 会自动管理 session cookies,但对于其他自定义的请求头,你需要手动设置。
如何在 requests.Session 中复用自定义请求头
示例:复用 X-Token
你可以在 Session 对象中设置自定义请求头,这样在所有使用该会话发出的请求中,这些头部都会自动包含。
import requests
# 创建一个 Session 对象
session = requests.Session()
# 设置自定义请求头
session.headers.update({'X-Token': 'your_token_value'})
# 发送第一个请求,使用 X-Token
response1 = session.get('https://example.com/api/endpoint1')
print(response1.text)
# 发送第二个请求,自动包含 X-Token
response2 = session.get('https://example.com/api/endpoint2')
print(response2.text)
# 如果需要在某些请求中不使用 X-Token,可以临时修改 headers
response3 = session.get('https://example.com/api/endpoint3', headers={'X-Token': None})
print(response3.text)
关键点
- 更新请求头:使用
session.headers.update()可以一次性设置多个请求头,包括自定义的X-Token。 - 自动携带:在该会话对象中发出的所有请求都会自动包含这些请求头。
- 临时修改:如果你需要在某个请求中临时修改或移除
X-Token,可以在发送请求时覆盖该头部。
3.4 代理设置
代理设置是在网络请求中使用代理服务器的配置。这可以帮助你在发送请求时通过一个中间服务器进行转发,而不是直接与目标服务器进行通信。代理设置有多种用途,主要包括:
1. 隐私保护
使用代理可以隐藏你的真实 IP 地址,保护你的在线隐私。这样,目标网站只能看到代理服务器的 IP,而无法直接获取到你的个人 IP。
2. 访问控制
某些网络或网站可能会限制特定 IP 地址或地区的访问。通过代理,可以绕过这些限制,访问被屏蔽的内容。
3. 性能提升
在某些情况下,代理可以缓存请求的响应,减少请求时间并提高加载速度。特别是在使用同一个代理的多个用户都请求相同资源时。
4. 测试和开发
开发者在测试应用程序时,可以通过代理设置模拟不同的网络条件、地理位置和网络环境。
5. 数据抓取
在进行 web 爬虫时,使用代理可以避免因频繁请求同一网站而被禁止访问。通过切换不同的代理,可以从多个 IP 地址同时进行请求,从而提高抓取效率。
代理设置示例
在使用 Python 的 requests 库时,可以通过以下方式设置代理:
import requests
# 设置 HTTP 和 HTTPS 代理
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'https://10.10.1.10:1080',
}
# 使用代理进行请求
response = requests.get('https://example.com', proxies=proxies)
print(response.text)
代理类型
- 透明代理:用户意识不到它的存在,通常用于缓存和内容过滤。
- 匿名代理:隐藏用户的真实 IP 地址,但代理服务器的 IP 地址会被暴露。
- 高匿代理(Elite Proxy):完全隐藏用户的 IP 地址,连代理服务器的 IP 地址也不被透露。
使用代理的场景
- 网络安全:通过代理隐藏真实 IP 地址,增加隐私保护。
- 地理限制:通过代理服务器绕过地理位置的访问限制,访问特定国家/地区的资源。
- 负载均衡:使用多个代理来均衡负载,避免对单一服务器发出过多请求。
- 网络测试:在开发中通过代理测试不同网络条件下的请求行为。
3.5 认证
from requests.auth import HTTPBasicAuth
response = requests.get('https://example.com', auth=HTTPBasicAuth('user', 'pass'))
4. 高级选项
4.1 重定向控制
response = requests.get('https://example.com', allow_redirects=False)
4.2 发送自定义请求
response = requests.request('GET', 'https://example.com')
5. 安装 requests 库
使用 pip 安装:
pip install requests

浙公网安备 33010602011771号