Scrapy与分布式开发(2.1.3):python常用网络请求库urllib3
Python urllib3模块详细讲解
一、引言
urllib3
是一个 Python 库,用于发送 HTTP 请求。它是 urllib
和 urllib2
的后续版本,并提供了更高级的功能和更好的性能。urllib3
支持 HTTP/1.1 和 HTTP/2 协议,并具有连接池、自动重试、文件上传/下载等特性。
二、安装
pip install urllib3
三、基本用法
发送 GET 请求
import urllib3
http = urllib3.PoolManager()
response = http.request('GET', 'https://www.example.com')
print(response.status) # 输出 HTTP 状态码
print(response.data.decode('utf-8')) # 输出响应内容
发送 POST 请求
import urllib3
http = urllib3.PoolManager()
headers = {'Content-Type': 'application/json'}
data = '{"key": "value"}'
response = http.request('POST', 'https://www.example.com/post', headers=headers, body=data)
print(response.status)
print(response.data.decode('utf-8'))
四、高级特性
连接池
urllib3
默认使用连接池来复用 HTTP 连接,以提高性能。
http = urllib3.PoolManager()
# 使用同一个连接池发送多个请求
response1 = http.request('GET', 'https://www.example.com/page1')
response2 = http.request('GET', 'https://www.example.com/page2')
自动重试
urllib3
支持自动重试失败的请求。
retries = urllib3.Retry(total=5, backoff_factor=0.1, status_forcelist=[ 500, 502, 503, 504 ])
http = urllib3.PoolManager(retries=retries)
response = http.request('GET', 'https://www.example.com/unreliable')
超时设置
可以为请求设置超时时间。
timeout = urllib3.Timeout(connect=5, read=10)
http = urllib3.PoolManager(timeout=timeout)
response = http.request('GET', 'https://www.example.com/slow', timeout=timeout)
代理设置
可以通过设置代理来发送请求。
proxies = {
"http": "http",
"https": "http",
}
http = urllib3.PoolManager(proxies=proxies)
response = http.request('GET', 'https://www.example.com')
文件上传和下载
urllib3
支持文件上传和下载。
# 文件上传
http = urllib3.PoolManager()
with open('local-file.txt', 'rb') as f:
fields = {'file': ('filename.txt', f)}
encoded_fields = urllib3.fields.encode_multipart_formdata(fields)
response = http.request('POST', 'https://www.example.com/upload', body=encoded_fields)
# 文件下载
http = urllib3.PoolManager()
response = http.request('GET', 'https://www.example.com/download/file.txt', preload_content=False)
with open('downloaded-file.txt', 'wb') as f:
shutil.copyfileobj(response.stream, f)
安全性
urllib3
支持 SSL 证书验证,以确保 HTTPS 请求的安全性。
http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where())
response = http.request('GET', 'https://www.example.com/secure')
本文来自博客园,作者:七夜魔手,转载请注明原文链接:https://www.cnblogs.com/ranbox/p/18461051