Python中如何使用urllib3进行http请求 (一)

Urllib3是什么以及为什么使用它?

Urllib3是一个强大且用户友好的Python HTTP客户端。它被设计用来替代默认的Python库进行HTTP请求的urllib2。相比于urllib2,Urllib3具有许多优势,包括连接池、线程安全和对HTTP/1.1的支持。此外,Urllib3具有更直观的API,比urllib2更容易使用。总体而言,在Python中使用Urllib3可以大大简化进行HTTP请求的过程。

Urllib3的安装与设置

要安装Urllib3,您可以使用Python包管理器pip。打开终端或命令提示符,运行以下命令:

pip install urllib3

这将安装Urllib3的最新版本及其所有依赖项。安装完成后,可以在Python代码中开始使用Urllib3。

要在Python代码中使用Urllib3,您需要导入urllib3模块。以下示例显示了如何执行此操作:

import urllib3http = urllib3.PoolManager()

此代码导入urllib3模块并创建一个新的PoolManager实例,用于进行HTTP请求。您可以使用此PoolManager实例进行HTTP请求,如下一节所述。

使用Urllib3进行HTTP请求的基本用法

要使用Urllib3进行基本的HTTP请求,可以使用您之前创建的PoolManager实例的request()方法。此方法将HTTP方法(例如GET、POST、PUT等)、URL和任何附加参数作为参数。

以下是使用request()方法进行GET请求以获取URL内容的示例:

import urllib3http = urllib3.PoolManager()response = http.request('GET', 'http://www.example.com')# 打印响应的状态码
print(response.status)# 打印服务器返回的数据
print(response.data)

在此示例中,使用GET方法和URL http://www.example.com调用了request()方法。这将向指定的URL发送GET请求,并返回包含服务器响应的Response对象。Response对象具有一个包含响应的HTTP状态码的status属性,以及包含服务器返回的数据的data属性。

您还可以使用request()方法进行其他类型的HTTP请求,例如POST、PUT、DELETE等。例如,以下代码演示了如何进行POST请求以将数据发送到服务器:

import urllib3# 创建新的HTTP连接池
http = urllib3.PoolManager()# 构建您的URL
url = 'https://www.example.com/api/v1/'# 构建您的POST参数
payload = {'param1': 'value1','param2': 'value2',
}# 将POST参数编码为JSON对象
encoded_data = json.dumps(payload).encode('utf-8')# 发起请求
response = http.request('POST',url,body=encoded_data,headers={'Content-Type': 'application/json'},
)# 处理响应
if response.status == 200:# 成功!data = json.loads(response.data.decode('utf-8'))print(data)
else:# 出现错误print(response.status)

请确保将https://www.example.com/api/v1/替换为要发送请求的API端点的实际URL。此外,请调整payload字典,以包含您要在POST请求中发送的实际参数。

使用Urllib3进行HTTP请求的高级用法

以下是使用Urllib3进行HTTP请求的两个高级示例。

带请求头发送请求: 要在请求中发送附加标头,可以向request()方法传递一个包含您想要包含在请求中的标头名称和值的headers参数。例如:

# 创建新的HTTP连接池
http = urllib3.PoolManager()# 构建您的URL
url = 'https://www.example.com/api/v1/'# 构建您的POST参数
payload = {'param1': 'value1','param2': 'value2',
}# 将POST参数编码为JSON对象
encoded_data = json.dumps(payload).encode('utf-8')# 在请求中包含附加标头
headers = {'Content-Type': 'application/json','Authorization': 'Bearer abcdefghijklmnopqrstuvwxyz','X-Custom-Header': 'my-custom-value',
}# 发起请求
response = http.request('POST',url,body=encoded_data,headers=headers,
)# 处理响应
if response.status == 200:# 成功!data = json.loads(response.data.decode('utf-8'))print(data)
else:# 出现错误print(response.status)

处理HTTP重定向: 要处理可能重定向的情况,可以使用以下代码:

import urllib3# 创建HTTP连接池
http = urllib3.PoolManager()# 发起GET请求到可能进行重定向的URL
r = http.request('GET', 'http://www.example.com/')# 检查响应的状态码
if r.status == 303:# 如果状态码为303,则响应是重定向# 从响应头中获取重定向的位置location = r.headers['Location']# 对重定向位置发起新的GET请求r = http.request('GET', location)# 此时,r将包含最终重定向的响应

此代码使用urllib3创建了一个HTTP连接池,然后发起了一个GET请求到给定的URL。如果响应的状态码为303,表示重定向,代码将从响应头中获取重定向的位置,并发起新的请求到该位置。最终的响应将存储在变量r中。

使用Urllib3进行身份验证和标头设置

以下是使用Urllib3进行身份验证和设置自定义标头的示例:

进行身份验证的例子:

import urllib3# 创建HTTP连接池
http = urllib3.PoolManager()# 设置身份验证凭据auth_creds = urllib3.util.make_headers(basic_auth='username:password')# 发起带有身份验证凭据的GET请求到URL
r = http.request('GET', 'http://www.example.com/', headers=auth_creds)# 检查响应的状态码
if r.status == 200:# 如果状态码为200,则请求成功# 处理响应数据response_data = r.data

设置自定义标头的例子:

import urllib3# 创建HTTP连接池
http = urllib3.PoolManager()# 设置自定义标头
custom_headers = {'X-My-Custom-Header': 'value1','X-Another-Custom-Header': 'value2'
}# 发起带有自定义标头的GET请求到URL
r = http.request('GET', 'http://www.example.com/', headers=custom_headers)# 检查响应的状态码
if r.status == 200:# 如果状态码为200,则请求成功# 处理响应数据response_data = r.data

此代码使用urllib3创建了一个HTTP连接池,然后使用urllib3.util中的make_headers函数设置了身份验证凭据。接着,它向给定的URL发起了带有身份验证凭据的GET请求,并在请求头中传递了身份验证凭据。如果响应的状态码为200,表示成功,代码可以处理响应数据。

请注意,此示例使用HTTP基本身份验证,其中用户名和密码合并为字符串(格式为username:password),并使用base64进行编码。其他类型的身份验证可能需要不同的方法。

总结

今天,我们主要学习了如何安装urllib3以及一些简单的请求操作,包括设置请求头和基本的用户认证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/657737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Coremail启动鸿蒙原生应用开发,打造全场景邮件办公新体验

1月18日,华为在深圳举行鸿蒙生态千帆启航仪式,Coremail出席仪式并与华为签署鸿蒙合作协议,宣布正式启动鸿蒙原生应用开发。作为首批拥抱鸿蒙的邮件领域伙伴,Coremail的加入标志着鸿蒙生态版图进一步完善。 Coremail是国内自建邮件…

编程笔记 html5cssjs 068 JavaScrip Boolean数据类型

编程笔记 html5&css&js 068 JavaScrip Boolean数据类型 一、Boolean数据类型二、运算符三、代码示例小结 JavaScript中的Boolean数据类型详解及示例。在JavaScript中,Boolean(布尔)数据类型是一种基本数据类型,它有两个可…

使用golang发送邮件

目前大多应用都是手机登录,但是作为开源的一个软件,或者是私有的一个应用,那么使用手机短信接收验证码成本比较高,使用邮箱相对更容易, 这里从tinode中取出发邮件的部分做一个测试, 其中邮箱一般需要设置…

Unity异步加载场景

前言 Unity中常见的加载场景就是异步加载场景,此博客对异步加载场景进行详细介绍 简单易懂好用。含有加载进度,加载动画等。(文末附工程) 代码分析 主要脚本MaskPanel ,作为单例存在于场景中,下面对此脚…

Angular组件(二) 分割面板ShrinkSplitter

Angular组件(二) 分割面板ShrinkSplitter 前言 在Angular组件(一) 分割面板ShrinkSplitter文章中我们实现了Splitter组件,后来在业务场景中发现在开关右侧容器和底部容器时,使用起来不方便,ngModel绑定的值始终是左侧容器和顶部容器的大小&…

Flutter App 生命周期观察监听

前言 本文主要讲解两种 Flutter生命周期观察监听 方式一:Flutter SDK 3.13 之前的方式,WidgetsBindingObserver; 方式二:Flutter SDK 3.13 开始的新方式,AppLifecycleListener; 测试平台:IO…

走进水稻种植教学基地可视化:科技与农业知识的完美结合

随着科技的不断发展,农业领域也在不断创新和进步。水稻种植教学基地可视化系统是一种基于现代信息技术手段的教学方式,通过虚拟现实、3D建模等技术,将水稻种植的全过程进行模拟和展示。这种教学方式打破了传统农业教学的局限性,使…

idea中yml文件没有提示解决办法

两步解决yml文件不显示提示,yaml文件显示提示问题 1、在插件中心,先下载下图两个插件 2、在Editor》File Types新增文件类型,文件名匹配规则需要将yaml和yml的都加上,加好之后,重启idea,即刻生效。

专利背后的故事 | 一种基于FTP文件的下载方法

Part 01 专利发明的初衷 FTP下载工具俗称为FTP工具,是我们常用的一个服务。FTP分为客户端和服务器端:FTP服务器被用于存储文件;FTP客户端用于通过FTP协议访问位于FTP服务器端上的资源,可以上传和下载文件。 在现实使用中可能会…

C++进阶--继承

概念 继承,允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。 继承的主要目的是实现代码的重用和构建类之间的层次关系。通过继承,子类可以获得父类的特性,包括数据成员…

嵌合抗体介绍-泰克生物

一.嵌合抗体简介 人-鼠嵌合抗体,即抗体的可变区来自鼠单克隆抗体,而恒定区则来自人的抗体。它是通过从杂交瘤细胞分离出功能性可变区基因,与人Ig恒定区基因连接,插入适当表达载体,转染宿主细胞表达产生。嵌合抗体既保留…

centOS+nodejs+mysql阿里云部署前后端个人网站

centOSnodejsmysql阿里云部署前后端个人网站 参考: 部署NodeExpressMySQL项目到阿里云轻量应用服务器 阿里云轻量应用服务器部署Node.jsReactMongoDB前后端分离项目 参考:在阿里云上部署nodejs服务 https 部署的原理就是你在本地测试的时候在地址栏&am…

给零基础朋友的编程课12 代码

给零基础朋友的编程课12 下 - 仿制品7 案例_哔哩哔哩_bilibili 源代码: // 色表 // 桃红 254,181,167 // 粉红 255,208,199void setup() {size(1000,750);background(254,181,167); }void draw() {// 绘制画框stroke(255,208,199);strokeWeight(28);noFill();rect…

Cmake编译Opencv3.3.1遇到有些文件无法下载的错误解决:

前言: 对于,opencv有些配置文件错误并未致命,所以,有错误也不影响后续的编译:但是,后引用如果要用,在回过头来还是要解决的。 问题表述: 比如,有些文件下载的错误&am…

Linux可视化管理

记得看目录哦! 1. webmin2. webmin安装及配置2.1 把软件传到opt目录下的webmin目录2.2 解压rpm -ivh webmin-1.700-1.noarch.rpm2.3 重置webmin的root密码2.4 修改webmin的端口2.5 重启webmin2.6 放开6666端口的防火墙2.7 网址输入ip:端口号 3. webmin的…

自建DNS劫持服务器,纯内网劫持PS5,屏蔽更新,自动hen

背景:目前PS5首次折腾必须要连外网,还要改DNS,除非使用ESP8266/32, 本文的方法是完全不改DNS,不使用ESP8266,不连接外网的情况下自动折腾 能实现什么: 1.折腾全程不连接外网 2.完全自建hen服务器&#xff…

维护管理Harbor,docker容器的重启策略

维护管理Harbor 通过HarborWeb创建项目 在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。 单击“项目”,填写项目名称,项目级别若设置为"私有",则不勾选。如果设置为公共仓库&#…

[C++]类和对象(上)

目录 一:面向过程与面向对象的区别 二:类的定义 三:类的访问限定符和封装 3.1访问限定符 3.2 封装 四:类的实例化 五:类对象模型 如何计算类的大小 类对象的存储方式 六:this指针 this指针的引出 this指针的特性 一:面向过程与面向对象的区别 面向过程 C语言是面…

[机器学习]TF-IDF算法

一.TF-IDF算法概述 什么是TF-IDF? 词频-逆文档频率(Term Frequency-Inverse Document Frequency,TF-IDF)是一种常用于文本处理的统计方法,可以评估一个单词在一份文档中的重要程度。简单来说就是可以用于文档关键词的提…

SQL注入:宽字节注入

SQL注入系列文章: 初识SQL注入-CSDN博客 SQL注入:联合查询的三个绕过技巧-CSDN博客 SQL注入:报错注入-CSDN博客 SQL注入:盲注-CSDN博客 SQL注入:二次注入-CSDN博客 ​SQL注入:order by注入-CSDN博客 …