使用Python的requests
库进行HTTP请求时,你可以利用其高级特性来执行更复杂的操作,比如会话管理、文件上传、处理Cookies、设置超时、使用代理等。以下是一些高级特性的示例和解释:
1. 会话管理
requests.Session
对象允许你跨请求保持某些参数,比如cookies、headers等。
import requests
# 创建一个会话对象
session = requests.Session()
# 任何传入的参数将会被赋值给这个会话
session.headers.update({'x-test-header': 'value'})
# 使用会话发送请求
response = session.get('http://httpbin.org/get')
print(response.request.headers) # 显示请求头
print(response.text) # 显示响应内容
# 再次使用会话发送请求,会话中的headers会被保留
response = session.get('http://httpbin.org/headers')
print(response.text)
2. 文件上传
你可以使用files
参数上传文件。
import requests
url = 'http://httpbin.org/post'
files = {'file': open('report.csv', 'rb')}
response = requests.post(url, files=files)
print(response.text)
3. 处理Cookies
requests
库可以自动处理Cookies,也可以手动管理。
import requests
url = 'http://httpbin.org/cookies/set/sessioncookie/123456789'
response = requests.get(url)
cookies = response.cookies
print(cookies['sessioncookie']) # 输出设置的cookie值
# 手动设置cookie
cookies.set('mycookie', '12345')
response = requests.get('http://httpbin.org/cookies', cookies=cookies)
print(response.text)
4. 设置超时
你可以为请求设置超时时间,以避免程序无限期等待响应。
import requests
try:
response = requests.get('http://httpbin.org/delay/2', timeout=1) # 设置1秒超时
except requests.Timeout:
print("请求超时")
5. 使用代理
如果你需要通过代理服务器发送请求,可以使用proxies
参数。
import requests
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'https://10.10.1.10:1080',
}
response = requests.get('http://httpbin.org/ip', proxies=proxies)
print(response.text)
6. 异步请求
虽然requests
本身不直接支持异步操作,但你可以结合grequests
库(是requests
的异步版本)来实现。
import grequests
urls = ['http://httpbin.org/get', 'http://httpbin.org/ip']
rs = (grequests.get(u) for u in urls)
responses = grequests.map(rs)
for response in responses:
print(response.text)
7. 自定义请求方法
requests
允许你发送任何HTTP方法。
import requests
url = 'http://httpbin.org/delete'
response = requests.delete(url)
print(response.text)
8. 处理重定向
默认情况下,requests
会自动处理重定向,但你也可以自定义这种行为。
import requests
response = requests.get('http://httpbin.org/redirect/1', allow_redirects=False)
print(response.status_code) # 显示重定向的状态码
通过这些高级特性,你可以更灵活地使用requests
库来满足你的网络请求需求。这些只是requests
库提供的一部分功能,还有更多高级用法等待你去探索和实践。