Scrapy与分布式开发(2.1.3):python常用网络请求库urllib3

本文详细介绍了Python的urllib3库,包括其安装方法,基本的GET和POST请求示例,高级特性如连接池、自动重试、超时设置、代理、文件上传下载以及SSL证书验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python urllib3模块详细讲解

一、引言

urllib3 是一个 Python 库,用于发送 HTTP 请求。它是 urlliburllib2 的后续版本,并提供了更高级的功能和更好的性能。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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九月镇灵将

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值