专栏首页从零开始学自动化测试python接口自动化27-urlencode编码与解码

python接口自动化27-urlencode编码与解码

前言

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)

运行结果:

http://www.example.com/?a=%E4%B8%8A%E6%B5%B7&b=%E6%82%A0%E6%82%A0

通过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=%E4%B8%8A%E6%B5%B7&b=%E6%82%A0%E6%82%A0 http://www.example.com/?a=上海&b=悠悠

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python笔记40-环境迁移freeze生成requirements.txt

    我们用python在本地电脑上开发完成一个python自动化项目用例,或者开发完成一个django项目。 需要部署到另外一台电脑或者服务器上的时候,需要导入py...

    上海-悠悠
  • Cypress web自动化19-自定义命令,把登陆当公共方法commands.js

    测试一个web网站的时候,通常需要先登录。要是每个脚本都写一次登录流程,太麻烦了,于是我们会想到写一个公共函数,这样每次去调用函数即可。 cypress 里面提...

    上海-悠悠
  • python测试开发django-71.自定义标签tag

    django的模板里面有很多标签可以快速实现一些功能,比如{% url url_name%} 可以快捷的导入一个本地url地址。 上一篇我们可以自定义一些过滤器...

    上海-悠悠
  • 程序的组成、存储与运行

    一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM, RAM 相当于内存, Flash 相当于硬盘。编译器会将一个程序分类为好几个部分,分别存储在...

    正念君
  • 从云计算到低延时,传统编码器与创新技术双剑合璧严把成本质量关

    大家好,我是赛灵思DCG数据中心负责Video业务的Sean Gardner,本次演讲的主要内容是赛灵思在中国发展过程中寻求新的业务探索与技术创新落地。

    LiveVideoStack
  • 图像地点场景类型识别(PlaceCNN)实践

      从图像中判断图像场景所处的地点类型,是图像理解的一种常见任务。本质上场景类别标注数据足够的情况下,它可以属于图像分类的一种,因此直接利用现有成熟的网络架构如...

    sparkexpert
  • 美国通过机器学习加速基因组医学并改善患者结果

    医疗保健和生命科学组织挖掘非结构化数据以获取洞察力,以推动精准医学的进步并加强患者护理 加利福尼亚州帕洛阿尔托,2018年7月2日 - Cloudera,In...

    用户1410343
  • Where do SAP CRM HANA Live Querys come from

    There are entries from value help of SAP HANA Live Query:

    Jerry Wang
  • intellij idea tomcat热部署配置1.设置Debugger-HotSwap2.项目设置3.配置tomcat

    在setting界面,打开Debugger-HotSwap选项,确保勾选了Build project before reloading classes,同时选择...

    JavaEdge
  • 线性代数-单射,满射,双射,同构,同态,仿射

    但 f(x) = 2x 从自然数集\(N\)到\(N\)不是满射,因为没有一个自然数\(N\)可以被这个函数映射到 3。

    marsggbo

扫码关注云+社区

领取腾讯云代金券