python接口自动化27-urlencode编码%E6%82%A0%E6%82%A0与解码
前言
urllib.parse 里面三个方法:urlencode,quote,unquote详解。
在做接口自动化过程中,http协议在发送url的时候,是以urlencode的编码格式传过去的,通常requests库会帮我们自动处理了。但是服务端返回的url地址,有时候是以urlencode的编码传过来的,我们需要从url上提取一些参数信息,这时候就需要对url解码了。
为什么需要urlencode编码
通常如果一样东西需要编码,说明其并不适合直接传输。原因多种多样,如Size过大,包含隐私数据。对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。
例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。
urlencode编码
先看一个python请求案例
import requests
url = "http://www.example.com/"
par = {
"a": "上海",
"b": "悠悠"
}
body = {
"content": "悠悠",
"charsetSelect": "utf-8",
"en": "UrlEncode编码"
}
r = requests.post(url, params=par, data=body)
print(r.url)
运行结果:
通过fiddler抓包看raw,会发现传过去的request部分,是经过了urlencode编码的(编码的操作requests库已经帮我们自动处理了,这就是requests人性化的地方)
urlencode编码
如果我们想自己操作,对字符串传入的字典参数进行urlencode编码,就需要用到两个方法urlencode和quote
urlencode方法传字典参数
from urllib.parse import urlencode, quote, unquote
# urlencode方法参数是字典
body = {
"content": "悠悠",
"charsetSelect": "utf-8",
"en": "UrlEncode编码"
}
print(urlencode(body))
运行结果:
content=%E6%82%A0%E6%82%A0&charsetSelect=utf-8&en=UrlEncode%E7%BC%96%E7%A0%81
quote传字符串参数
# quote方法参数是字符串
print(quote("上海-悠悠"))
url = "http://www.example.com/?a=上海&b=悠悠"
print(quote(url))
运行结果:
%E4%B8%8A%E6%B5%B7-%E6%82%A0%E6%82%A0
http%3A//www.example.com/%3Fa%3D%E4%B8%8A%E6%B5%B7%26b%3D%E6%82%A0%E6%82%A0
urlencode解码
如果返回的数据里面有urlencode编码的字符串,类似于%E4%B8%8A%E6%B5%B7&b=%E6%82%A0%E6%82%A0这种格式,可以使用unquote方法解码
import requests
from urllib.parse import urlencode, quote, unquote
url = "http://www.example.com/"
par = {
"a": "上海",
"b": "悠悠"
}
body = {
"content": "悠悠",
"charsetSelect": "utf-8",
"en": "UrlEncode编码"
}
r = requests.post(url, params=par, data=body)
print(r.url)
print(unquote(r.url))
运行结果:
http://www.example.com/?a=上海&b=悠悠
http://www.example.com/?a=上海&b=悠悠
python接口自动化27-urlencode编码%E6%82%A0%E6%82%A0与解码的更多相关文章
- python接口自动化(十)--post请求四种传送正文方式(详解)
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
- python接口自动化-参数化
原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ...
- python接口自动化1-发送get请求
前言 requests模块,也就是老污龟,为啥叫它老污龟呢,因为这个官网上的logo就是这只污龟,接下来就是学习它了. 一.环境安装 1.用pip安装requests模块 >>pip in ...
- python接口自动化25-发xml格式post请求
前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...
- python接口自动化(响应对象方法)
python接口自动化(响应对象方法) 一.encoding作用 获取请求的编码(在不设置响应编码时,响应的信息默认使用的是请求的编码格式):r.encoding 设置响应的编码:r.encoding ...
- Python接口自动化——soap协议传参的类型是ns0类型的要创建工厂方法纪要
1:在Python接口自动化中,对于soap协议的xml的请求我们可以使用Suds Client来实现,其soap协议传参的类型基本上是有2种: 第一种是传参,不需要再创建啥, 第二种就是ns0类型的 ...
- python接口自动化-Cookie_绕过验证码登录
前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...
- python接口自动化28-requests-html爬虫框架
前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...
- python接口自动化 -参数关联(一)
原文地址https://www.cnblogs.com/yoyoketang/p/6886610.html 原文地址https://www.cnblogs.com/yoyoketang/ 原文地址ht ...
- python接口自动化20-requests获取响应时间(elapsed)与超时(timeout)
前言 requests发请求时,接口的响应时间,也是我们需要关注的一个点,如果响应时间太长,也是不合理的. 如果服务端没及时响应,也不能一直等着,可以设置一个timeout超时的时间 关于reques ...
随机推荐
- 动态规划面试题基础合集1--数学三角形,LIS , LCS, CSD
动态规划的一般思路是分为四步,即:寻找最优子结构.递归定义最优子结构.自底向上求解最优子结构和构造最优解. 接下来我列举出几个常见的动态规划面试题进行说明. (1)数学三角形:比较简单,直接贴一个我看 ...
- Linux下的堆off-by-one的利用
这篇稿子已经投到了360安全播报,http://bobao.360.cn/learning/detail/3113.html
- Java深度复制List内容。
最近在工作的时候,有一个小需求,需要复制List的内容,然后会改变其中的数据,但是试了几种复制的方法,都是将原有的数据和复制后的数据都改变了,都没有达到我想要的效果. 其中涉及到了 "浅复制 ...
- MATLAB读写Excel文件中的数据
读取: %读取filename文件中指定表的数据,存入dataRead矩阵中 dataRead=xlsread('filename.xls',sheet); 写入: %将矩阵dataWrite中的数据 ...
- Adapter 适配器
意图 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 动机 在软件开发中,有的时候系统的数据和行为都正确,但接口不符合,我们应 ...
- 【BZOJ】1566: [NOI2009]管道取珠
题解 假如我们非常熟练的看出来,平方和转有序对统计的套路的话,应该就不难了 我们只需要统计(wayA,wayB)生成的序列一样的有序对个数就行 可以用一个\(n^3\)的dp解决 \(dp[i][j] ...
- C#一步一步学网络辅助开发(1)--常用抓包工具的使用
这次写的是一个系列,是让大家了解如何进行网络的辅助开发.要进行网络辅助开发抓包工具是必不可少的,下面就让大家熟悉一下常用的一些抓包工具, 1,Fiddler 这个工具是我目前用的最多的一款抓包工具,不 ...
- 操作数据----DML语句
insert语句基本语法 insert into table(column) values(values); insert into dept (deptno,dname,loc) ,'develop ...
- ubuntu16.04 删除内核
一.背景 今天开机输入密码后,Ubuntu就卡在左下角有“Ubuntu 16.04 LTS”字样的那个界面,鼠标可以移动,但无法进入桌面.考虑到这个问题可能是因为ubuntu的自动更新造成的,于是重新 ...
- annotation中的Autowired
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...