前言

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))

运行结果:

python2018上海脱产_python接口自动化27-urlencode编码%E6%82%A0%E6%82%A0与解码相关推荐

  1. python调用接口时传多个参数_python接口自动化11-post传data参数案例

    前言: 前面登录博客园的是传json参数,有些登录不是传json的,如jenkins的登录,本篇以jenkins登录为案例,传data参数. 一.登录jenkins抓包 1.登录jenkins,输入账 ...

  2. python接口自动化关联参数_python接口自动化7-参数关联

    前言 我们用自动化发帖之后,要想接着对这篇帖子操作,那就需要用参数关联了,发帖之后会有一个帖子的id,获取到这个id,继续操作传这个帖子id就可以了 (博客园的登录机制已经变了,不能用账号和密码登录了 ...

  3. python调用文件下载接口_python接口自动化21-下载excel文件(Content-Type:octets/stream)...

    前言 Content-Type类型为octets/stream,这种一般是文件类型了,比如有时候需要导出excel数据,下载excel这种场景如何用python来实现呢? 抓下载接口 1.下载的场景如 ...

  4. python接口自动化pdf悠悠_python接口自动化13-data和json参数傻傻分不清【悠悠】

    https://www.cnblogs.com/yoyoketang/p/7231384.html 前言 在发post请求的时候,有时候body部分要传data参数,有时候body部分又要传json参 ...

  5. python自动化接口测试中的cookies怎么实现_Python接口自动化之cookie、session应用

    ------·今天距2021年260天·------ 这是ITester软件测试小栈第112次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化-requests模块之post请 ...

  6. soapui工具_python接口自动化(四)--接口测试工具介绍(详解)

    简介 "工欲善其事必先利其器",通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进 ...

  7. python 封装_python接口自动化学习笔记(封装方法用于读取excel)

    本文是为难得干货文章 (是位大佬所写哦) 大家好,我是测试君. 下面分享一波Python接口自动化文章: 本篇是使用xlrd实现的对excel的数据进行读取,xlrd网上demo很多,不做过多叙述,下 ...

  8. python程序如何封装成接口_python接口自动化如何封装获取常量的类

    这篇文章主要介绍了python接口自动化如何封装获取常量的类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 背景: 一.执行case的过程: 首先需 ...

  9. 用python画风车_python接口自动化()一)(实现一款简单的接口自动化框架)

    python接口自动化一(设计一款自己的接口自动化框架) 一.起因: 前面学习过了python接口requests来进行接口测试,但是在框架选择上还是选择的unittest.当接口数量不怎么多时还好, ...

最新文章

  1. pd.read_csv读取txt时整型变成浮点型问题解决
  2. 模型训练 准确率下降_手写批量线性回归算法:在Python3中梯度下降方法实现模型训练
  3. 王道考研 计算机网络7 TCP/IP参考模型
  4. DCOM EXCE权限配置问题
  5. linux 实验指导书,linux操作系统实验指导书新 - 图文
  6. Exchange 2016 OWA登陆异常
  7. excel乘法公式怎么输入_精选43个Excel表格的操作技巧| 推荐收藏
  8. 创建My SQL 数据库
  9. 手柄游戏之《恶魔城暗影之王》推荐
  10. [python]python生成md5
  11. 一些常见html5语义化标签
  12. JAVA汉字转拼音工具类
  13. Total Control的深入用法,如何使用脚本实现启动或重启指定App
  14. stm32中断方式和DMA方式完成串口通信
  15. python安装random_如何安装python randon
  16. APP消息智能推送有什么特点
  17. Oracle数据库的dblink连接
  18. 财务自由?这样做微信开发可以吗?
  19. hook(2)Activity启动流程,安卓开发实战
  20. php168,phpcms,dedecms 使用感受

热门文章

  1. 异部时钟电路的FPGA设计
  2. 我の第一篇万字博文 | 带大家开开心心地进入Python世界
  3. spring cloud config将配置存储在数据库中 1
  4. 在iis中让asp.net的错误显示在远程访问电脑中
  5. 面部识别辅助监控系统 人工智能为城市安全保驾护航
  6. rac_安装软件时报版本号过高问题
  7. Exchange Server 2013就地电子数据展示
  8. web页面事件无响应,元素点击不到
  9. 在 Lotus Notes 中设置邮件定时发送的方法及代理功能介绍
  10. 裁员纪实——联想不是我的家(转帖)