requests库/urllib3库返回WEB响应内容的处理差异

requests库是一个广泛使用的HTTP库,用于发送HTTP请求和处理响应。
以下是requests库中一些主要类和方法的详细介绍:
requests库主要类和方法
类:
requests.models.Response:
status_code: 响应状态码。
text: 以Unicode形式返回响应内容。
content: 以字节形式返回响应内容。

headers: 响应头信息。
json(): 将响应内容解析为JSON格式。
方法:
requests.request(method, url, **kwargs):发送HTTP请求,并返回Response对象。可以指定请求方法、URL,以及其他参数。
requests.get(url, params=None, **kwargs):发送GET请求,并返回Response对象。可以指定URL、查询参数等。
requests.post(url, data=None, json=None, **kwargs):发送POST请求,并返回Response对象。可以指定URL、表单数据、JSON数据等。
requests.put(url, data=None, **kwargs):发送PUT请求,并返回Response对象。
requests.delete(url, **kwargs):发送DELETE请求,并返回Response对象。
requests.head(url, **kwargs):发送HEAD请求,并返回Response对象。
requests.options(url, **kwargs):发送OPTIONS请求,并返回Response对象。
requests.Session():创建一个会话对象,可以跨多个请求保持会话状态,共享Cookie等信息。
requests.exceptions.RequestException:所有requests库的异常的基类。

requests库中,Response对象的content属性字节形式返回响应内容。这个属性返回的是原始的字节数据,通常用于处理非文本内容(如图片、视频等)的响应。 
requests库中,Response对象的text属性Unicode形式返回响应内容,以便进行文本处理和解析。

import requests

# 发送GET请求
response = requests.get('https://www.example.com')

# 获取响应内容的Unicode形式
response_text = response.text

# 打印响应内容的前100个字符
print(response_text)

---------------------------------------
urllib3库提供了许多类和方法,用于发送HTTP请求、管理连接池、处理代理、证书验证等功能。
以下是urllib3库中最常用的类及其方法的简要介绍:
urllib3.PoolManager类
request(method, url, fields=None, **urlopen_kw):发送HTTP请求并返回HTTPResponse对象。可以指定请求方法、URL,以及其他参数。
urlopen(method, url, body=None, headers=None, retries=3, redirect=True, assert_same_host=True, timeout=Timeout.DEFAULT_TIMEOUT, pool_timeout=None, release_conn=None, chunked=False, body_pos=0, fields=None, preload_content=True, decode_content=True, retries=Retry.DEFAULT, **response_kw):发送HTTP请求并返回HTTPResponse对象。与request方法类似,但提供更多的参数选项。

urllib3.HTTPResponse类
status:获取响应状态码。
data:获取响应的原始字节流数据response.data.decode('utf-8') # 将原始字节流解码为字符串
headers:获取响应头信息。
连接管理
urllib3.connection_from_url(url, **kw):根据URL创建一个连接对象。
urllib3.make_headers(**headers):创建HTTP请求头。
urllib3.disable_warnings(category=InsecureRequestWarning):禁用特定的警告类别。
异常类
urllib3.exceptions.MaxRetryError:超过最大重试次数时引发的异常。
urllib3.exceptions.SSLError:SSL证书验证失败时引发的异常。

import urllib3

# 创建一个PoolManager对象
http = urllib3.PoolManager()

# 发送GET请求并获取响应对象
response = http.request('GET', 'https://www.example.com')

# 检查响应状态码
if response.status == 200:
    # 读取并打印网页内容
    html_content = response.data.decode('utf-8')
    print(html_content)
else:
    print("Failed to fetch the webpage. Status code:", response.status)

 在urllib3中,使用data属性来获取响应的原始字节流数据。可以将这些数据解码为字符串,如UTF-8编码,以获取文本内容。

import urllib3
import json

http = urllib3.PoolManager()

data = {'attribute': 'value'}
encoded_data = json.dumps(data).encode('utf-8')

response = http.request(
    'POST',
    'http://httpbin.org/post',
    body=encoded_data,
    headers={'Content-Type': 'application/json'}
)

print(response.status)
print(response.data.decode('utf-8'))

urllib3 是 Python 中的一个 HTTP 客户端,它是 requests 依赖的底层之一。通常情况下,urllib3requests 对 OpenSSL 都有良好的支持。如果你遇到了因为 urllib3 放弃对某个版本的 OpenSSL 支持而使得 requests 无法正常工作的情况,这里有几个可能的解决步骤: 1. **确认错误信息**:首先,需要确认具体是由于什么原因导致的不兼容问题。错误信息通常能给出一些线索。 2. **更新依赖**:尝试更新你的 urllib3requests 到最新版本,因为新版本可能已经修复了与 OpenSSL 相关的问题。可以使用 pip 命令进行更新: ``` pip install --upgrade urllib3 requests ``` 3. **检查 OpenSSL 版本**:确保你使用的 OpenSSL 版本与 urllib3 兼容。有时候可能需要升级或者降级 OpenSSL。 4. **使用替代方案**:如果问题依旧存在,可以考虑使用其他同样功能的,比如 `requests-kwargs` 或者直接使用 Python 标准中的 `http.client`。 5. **环境隔离**:如果在虚拟环境中安装的出现了问题,可以尝试创建一个新的虚拟环境,以确保环境之间不会相互影响。 6. **查看官方文档和社区**:查看 urllib3requests 的官方文档,以及相关社区和问题追踪器,看看其他用户是否遇到了类似的问题,并寻找解决方案。 在处理这类问题时,务必小心,因为可能涉及到系统级的更新,这可能会影响到系统中其他依赖 OpenSSL 的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值