Python urllib3模块浅析

1,522 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

复习回顾

我们都知道使用 Python 进行网络编程之前,我们要经常如下步骤:

  1. 学习计算机网络基础知识,对OSI层、TCP/IP 协议层有基本认识
  2. 学习Python支持的网络编程库,比如urllib模块相关方法的学习

本期,我们将学习比 Python 内置的urllib模块功能更强大的urllib3模块相关方法的学习,let's go ~

1. urllib3 模块概述

什么是 urllib3 模块?

urllib3 是专门用于HTTP客户端的第三方Python库,Urllib3 提供比Python原生库更多网络操作

我们可以在PyPI网站可以看到Urllib3提供的8种特性

  • Thread safety 线程安全
  • Connection pooling 连接池
  • Client-side SSL/TLS verification 客户端SSL/TLS验证
  • File uploads with multipart encoding 文件分布编码上传
  • Helper for retrying requests and dealing with HTTP redirects 协助处理重复请求和HTTP重定位
  • Support for gzip,deflate,and brotli encoding 支持压缩编码
  • Proxy support for HTTP and SOCKS 支持HTTP和Sock代理
  • 100% test coverage 100%测试覆盖

urllib3 用户手册中可以详细看到urllib3用法介绍

urllib3 安装方法

方式一:在命令行窗口输入

pip install urllib3

方式二:使用git clone

git://github.com/urllib3/urllib3.git
python setup.py install

urllib3 使用方法 我们在代码中同样需要import进行导入

import urllib3

2. urllib3 相关方法

我们urllib3用户手册上可知常见的方法有如下:

方法作用
urllib3.PoolManager.request(req,url,[headers,field]..)创建PoolManager实例通过request来发送一个HTTP请求,并返回HTTPresponse对象

🚩urllib3.PoolManager.reques()相关字段说明

参数作用
req请求方法,常见有POST、GET
header请求header参数
fields查询参数,可以用于GET、HEAD、DELETE请求以及表单数据PUT和POST请求
bodyJosn格式数据
timeout设置超时时间,可以是具体的时间或者urllib3.Timeout(connect,read)实例对象
retries重试请求,可以指定整数,当设置为False则禁用重定向和重试请求。若没有指定,默认情况会执行3次重试和3次重定向
redirect设置为False时,则禁用重定向但保留重试逻辑

🚩HTTPresponse对象提供的相关属性

属性作用
status返回HTTP状态码如200成功,500服务器异常,403客户端数据异常
data返回HTTPresponse的信息(JOSN、二进制)
header返回HTTP请求的header信息
auto_close管理io_TextIOWrapper接口,通常设置为False

urllib3 只提供一种错误异常处理urllib3.expections.NewConnectionError

3. urllib3 VS urllib

  1. 请求方式

    • urllib3:通过urllib.PoolMangaer.request请求,可以指定请求方式
    • urllib:则直接通过urllib.request.urlopen()请求,默认是GET,当传入data则是POST
  2. Cookie管理

    • urllib3:不能直接添加cookie,只能将cookie设置到headers中
    • urllib:可以通过request.build_opener方法来重新构造opener
  3. 设置Proxy代理

    • urllib3:直接使用urllib.PoolMangaer()传入代理服务器地址即可
    • urllib:则需要通过request.ProxyHandler()创建代理对象,然后在通过request.build_opener重构opener对象

4. 小试牛刀

根据上面我们对urllib3相关的方法使用,我们来实操一下吧~

  • 基本使用步骤

    1. 导入import urllib3库
    2. 使用urllib3.PoolManger()创建一个连接池对象
    3. 连接池对象调用request方法,需要传入请求方法和url参数
    4. 打印请求返回信息如状态码、response信息等
import urllib3

http = urllib3.PoolManager()

req = http.request("GET","https://juejin.cn/user/211521683863847/posts")

print("请求状态码:",req.status)
print("response:",req.data.decode("utf-8"))

总结

本期,我们对Python 网络编程第三方库urllib3相关方法的学习,对比python内置的urllib进行简单的对比。

以上是本期内容,欢迎大佬们点赞评论,下期见~