PYTHON实现HTTP request的一些有用的函数

前言

我们知道,当需要设计一个程序和服务器进行交互时,往往会用到HTTP的request,即服务器有一个对外接口REST API,因此当向服务器发送符合格式要求的HTTP request时,服务器会给出响应,甚至执行一些任务。如需了解详情,请阅读[1]。

PYTHON是一种常见的编程语言,可以发送HTTP request,并接受从服务器中得到的反馈。博客[2]中说明了一种使用PYTHON发送HTTP request并接受反馈数据的方法。当然,也可以使用JAVA,Swift,C#,Javascript等编程语言实现类似功能。

在AGV项目中,HTTP request可以用于和AGV调度服务器进行交互,调度服务器有REST API。因此,要设计一个给AGV发送任务,管理任务,实时监测AGV以及外部设备(如电梯,卷帘门)的状态等的程序,可以用PYTHON写一个通过HTTP request和AGV调度服务器交互的程序。该程序就相当于调度服务器的客户端。

由于[2]中已经说明了PYTHON使用HTTP request的基本方法,本文不赘述。本文主要介绍一些有用的函数。

一、URL格式转化函数

URL所能接受的格式,和自然语言的格式是有区别的。例如,某AGV调度系统中,获取某车信息的URL是:http://<服务器地址>:<端口>/agv/<车名>?&property=<属性名列表>。那么如果服务器在本地,端口为6000,车名是“Vehicle A”,要获取的属性包括"location","speed",那么URL应该是:http://127.0.0.1:6000/agv/Vehicle A?&property=["location","speed"]。但显然这是不行的,因为URL编码不支持空格,括号,引号等字符。通常,URL的编码标准是RFC1738[3]。网站[3]可用于将URL按照RFC1738标准进行编码。

ca7cd339cf0e4c20994a3c209802ca85.png

PYTHON中同样有这样的程序,这个程序包就是urllib.parse,里面的quote函数就可实现该功能。

from urllib import parse
print(parse.quote('http://127.0.0.1:6000/agv/Vehicle A?&property=["location","speed"]'))
#运行结果:
#'http%3A//127.0.0.1%3A6000/agv/Vehicle%20A%3F%26property%3D%5B%22location%22%2C%22speed%22%5D'

虽然显示和上图略有不同,但不会影响URL的解析。该URL可以正确解析。

注意:请勿在已编码的URL上再进行编码操作,否则会导致结果错误!

如果对一个URL编码两次,会怎么样呢?

from urllib import parse
encodedURL = parse.quote('http://127.0.0.1:6000/agv/Vehicle A?&property=["location","speed"]')
print(parse.quote(encodedURL))
#运行结果:
#http%253A//127.0.0.1%253A6000/agv/Vehicle%2520A%253F%2526property%253D%255B%2522location%2522%252C%2522speed%2522%255D

显然,结果是错误的。如果用这样的URL发出请求一定会出错。

二、PYTHON字典和POST request的发送数据的相互转化函数

PYTHON字典的格式和发送HTTP request的POST请求带上的数据常见格式JSON十分相似,但也有区别,例如,

1. PYTHON字典用字符串表示时,里面的引号通常是单引号。但在JSON中应为双引号。

2. PYTHON字典里的布尔量是True和False,但在JSON中应为true和false。

等等。

print(str({"A":1, "B":True}))
#运行结果:
#{'A': 1, 'B': True}

JSON格式见[4]。所以这里应该是

{"A": 1, "B": true}

博文[2]中给出了一种把PYTHON字典转化为JSON数据的方式,但其实还有另一种方法,就是利用PYTHON中的json包。

(一)将PYTHON字典转化为JSON数据

import json
print(json.JSONEncoder().encode({"A":1, "B":True}))
#运行结果:
#{"A": 1, "B": true}

以上代码,将PYTHON字典转换成了JSON格式,可用于通过HTTP request发送给服务器。

from urllib.request import Request
data = json.JSONEncoder().encode({"A":1, "B":True}).encode('utf-8')
req = Request(request_path, data=data, method=method, headers=header)
response = request.urlopen(req, data, timeout=timeout).read().decode('utf-8')

(二)将JSON数据转为PYTHON字典

上述代码中的response是服务器返回的JSON格式字符串,也可通过json包里的一个函数loads将其转化为python的字典

json.loads(response)

以那个简单的字典为例,先将其转化为JSON,然后再将其转化回PYTHON字典

data_byte = json.JSONEncoder().encode({"A":1, "B":True}).encode('utf-8') #这步将字典转化为JSON
print(data_byte)
#b'{"A": 1, "B": true}'
data_dict = json.loads(data_byte.decode('utf-8'))#这步将JSON转化回字典
print(data_dict)
#{'A': 1, 'B': True}
print(type(data_dict))
#<class 'dict'>

链接

[1]【网络原理】HTTP 请求 (Request)详解_request请求-CSDN博客

[2]Python爬虫入门:urllib.request.Request详解-CSDN博客

[3]URL Encode Online | URLEncoder

[4]json格式-CSDN博客

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

睢宁自闭症寄宿学校:培养特殊孩子的未来

在自闭症儿童的教育与康复领域&#xff0c;每一所学校的努力都是对孩子们未来无限可能的一次深刻诠释。从江苏睢宁到广东广州&#xff0c;自闭症寄宿学校正以不同的方式&#xff0c;为这些特殊的孩子铺设一条通往未来的希望之路。其中&#xff0c;广州的星贝育园自闭症儿童寄宿…

【算法篇】回溯算法类(1)(笔记)

目录 一、理论基础 1. 相关题目 2. 遍历过程 3. 代码框架 二、LeetCode 题目 1. 组合 2. 组合总和III 3. 电话号码的字母组合 4. 组合总和 5. 组合总和II 6. 分割回文串 7. 复原IP地址 8. 子集 一、理论基础 1. 相关题目 2. 遍历过程 3. 代码框架 void backtr…

SSM环卫人员管理平台—计算机毕业设计源码36412

目 录 摘要 1 绪论 1.1背景及意义 1.2国内外研究概况 1.3研究内容 1.4 ssm框架介绍 1.5论文结构与章节安排 2 环卫人员管理平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1 功能性…

JAVAIDEA初始工程的创建

四结构 建工程综述* 初始*&#xff1a; 1、先建个空项目&#xff0c; 2、打开文件中的项目结构新建module模块&#xff08;模块下有src&#xff09; 修改模块名&#xff1a; 也是Refactor&#xff0c;Rename&#xff0c;但是要选第三个同时改模块和文件夹名字 导入模块&am…

C++——模拟实现vector

1.查看vector的源代码 2.模拟实现迭代器 #pragma oncenamespace jxy {//模板尽量不要分离编译template <class T>class vector{public:typedef T* iterator;//typedef会受到访问限定符的限制typedef const T* const_iterator;//const迭代器是指向的对象不能修改&#xf…

开发和软件工程一样吗?

时间&#xff1a;2024年 10月 02日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频&#xff1a;喜马拉雅 大家好&#xff0c;欢迎来到“小蒋聊技术”&#xff0c;我是小蒋&#xff01; 今天咱们要聊的话题是——开发和软件工…

17.反射与动态代理

目录 1.反射的概述 2.学习反射到底学什么&#xff1f; 3.字节码文件和字节码文件对象 4.获取字节码文件对象的三种方式 5.Class类中用于获取构造方法的方法 6.Class类中用于获取成员变量的方法 7.Class类中用于获取成员方法的方法 8.反射和配置文件结合动态获取的练习与利用反…

Java类和对象、自定义包、static、代码块、方法重写

目录 1.类和对象 2.this指针 3.对象的构造和初始化 3.1默认初始化 3.2就地初始化 3.3构造初始化 3.4IDEA快速填充 3.5使用this简化 3.6初始化的总结 4.包的引入 4.1包的概念 4.2导入包中的类 4.3自定义包 5.static修饰 6.代码块的划分 7.方法重写 1.类和对象 使…

C++系列-多态

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 多态 多态就是不同类型的对象&#xff0c;去做同一个行为&#xff0c;但是产生的结果是不同的。 比如说&#xff1a; 都是动物叫声&#xff0c;猫是喵喵&#xff0c;狗是汪汪&am…

rancher hello-world

创建一个Deployment, 只填名称和容器镜像rancher/hello-world 成功后: 查看日志 结果&#xff1a; 部署了工作负载。这个过程可能需要几分钟完成。 当您的工作负载部署完成后&#xff0c;它的状态将变为Active&#xff0c;您可以从项目的工作负载页面查看工作负载当前的状态…

ARM assembly: Lesson 10

今天&#xff0c;我们来看一下基于ARM汇编&#xff0c;如何实现函数的调用。 基础知识 在ARM汇编中&#xff0c;函数的前四个参数存放于 R0~R3寄存器中, 剩余的参数存放于栈中&#xff0c;返回值存放于r0。在栈中存放数值&#xff0c;可以避免在调用过程中&#xff0c;数据的…

串--KMP算法之手动计算next数组(详解)

目录 一、手动计算next数组 二、使用next数组进行模式匹配 三、练习 一、手动计算next数组 next[2] 表示模式串和主串对比&#xff0c;模式串里面第2个字符和主串不匹配&#xff0c;j应该指向几&#xff1f; 首先&#xff1a;字符串的下标和next数组下标保持一致 字符串是1~…

初识TCP/IP协议

回顾上文 来回顾一下TCP协议的特性&#xff0c;有一道比较经典的题&#xff1a;如何使用UDP实现可靠传输&#xff0c;通过应用程序的代码&#xff0c;完成可靠传输的过程&#xff1f; 原则&#xff0c;TCO有啥就吹啥&#xff0c;引入滑动窗口&#xff0c;引入流量控制&#x…

计算机毕业设计 农场投入品运营管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

ECP5701:PD协议芯片兼容PD 2.0和PD 3.0 (5V,9V,12V,15V,20V),支持 PD 输入多种类型无线充方案

TYPE-C接口&#xff0c;全称USB Type-C&#xff0c;是近年来在电子设备中广泛采用的一种新型接口。它以其小巧的尺寸、可逆的插拔方向以及高速的数据传输能力&#xff0c;迅速取代了传统的USB接口&#xff0c;成为现代设备的标准配置。不仅如此&#xff0c;TYPE-C接口还支持PD&…

2024年音频转文字:不可错过的四大工具!

在数字化办公和学习的背景下&#xff0c;音频转文字服务正变得越来越重要。本文将针对几款备受推崇的音频转文字工具进行深入解析&#xff01; 365在线转文字&#xff1a;云端处理&#xff0c;无需下载 直达链接&#xff1a;www.pdf365.cn/ 365在线转文字以其高效的转录速度…

Pikachu-Cross-Site Scripting-存储型xss

存储型xss &#xff0c;随便输入点内容&#xff0c;都能保存下来&#xff1b;刷新后也不会丢失&#xff1b;输入特殊字符&#xff0c;也能原样返回&#xff1b; 查看代码&#xff0c;也可以看到输出结果直接原路返回&#xff0c;不做处理 构造payload <script>alert(1)…

batch和momentum

&#x1f680; 机器学习系列前期回顾 1、初识机器学习 2、线性模型到神经网络 3、local minima的问题如何解决 &#x1f680;在初识机器学习中&#xff0c;了解了机器学习是如何工作的并引入了线性模型&#xff0c;在线性模型到神经网络这节&#xff0c;将线性模型进一步改进为…

【web安全】——XSS漏洞

1.XSS漏洞基础 1.1.漏洞成因 XSS(Cross-site scripting)被称为跨站脚本攻击&#xff0c;由于与层叠样式表的缩写一样&#xff0c;因此被缩写为XSS.XSS漏洞形成的原因是网站/程序对前端用户的输入过滤不严格&#xff0c;导致攻击者可以将恶意的is/html代码注入到网页中&#x…

基于Word2Vec和LSTM实现微博评论情感分析

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…