urlencode与urldecode
今天在通过requests做接口请求的时候,发现不管是用dict还是用json传参,都没有办法请求成功。
然后我又通过jmeter试了一下。发现能请求成功。不是接口的问题。
然后我看了一下请求参数。是一个UrlEncode编码。我想是不是我用requests请求的时候也需要转换成UrlEncode编码编码呢?
把我的数据data,转换成UrlEncode编码。发现请求成功。
那么,什么是UrlEncode编码呢?
定义:百分号编码(英语:Percent-encoding), 也称作URL编码(英语:URL encoding), 是特定上下文的统一资源定位符 (URL)的编码机制. 实际上也适用于统一资源标志符(URI)的编码。也用于 为"application/x-www-form-urlencoded" MIME准备数据, 因为它用于通过HTTP的请求操作(request)提交HTML表单数据。
使用urlENcode原因:
1、当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的
2、因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符。
1、当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的
2、因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符。
编码原理:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
比如:
空格ASCII码是32,对应16进制是20,那么urlencode编码结果是:%20,但在新标准中空格对应的是+
比如:
中 ASCII码是-10544,对应的16进制是FFFFFFFFFFFFD6D0,那么urlencode编码结果是:%D6%D0
部分特殊字符编码:
空格 ! # $ % + @ : = ?
%20 %21 %23 %24 %25 %2B %40 %3A %3D %3F
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
比如:
空格ASCII码是32,对应16进制是20,那么urlencode编码结果是:%20,但在新标准中空格对应的是+
比如:
中 ASCII码是-10544,对应的16进制是FFFFFFFFFFFFD6D0,那么urlencode编码结果是:%D6%D0
部分特殊字符编码:
空格 ! # $ % + @ : = ?
%20 %21 %23 %24 %25 %2B %40 %3A %3D %3F
一、urlencode
urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串,比如:
import urllib.parse data ={ "sstType":2, "sstShiftType":2, "shiftsJson":[ {"ssName":"白班", "ssStartTime":"08:00:00", "ssEndTime":"17:00:00", "ssUnid":363} ] } # 转换成UrlEncode编码 data=urllib.parse.urlencode(data,encoding='gb2312') print(data) 结果: sstType=2&sstShiftType=2&shiftsJson=%5B%7B%27ssName%27%3A+%27%B0%D7%B0%E0%27%2C+%27ssStartTime%27%3A+%2708%3A00%3A00%27%2C+%27ssEndTime%27%3A+%2717%3A00%3A00%27%2C+%27ssUnid%27%3A+363%7D%5D
如果只想对一个字符串进行urlencode转换,怎么办?urllib提供另外一个函数:quote()
import urllib.parse str='杭州' str=urllib.parse.quote(str) print(str) 结果: %E6%9D%AD%E5%B7%9E
二、urldecode
当urlencode之后的字符串传递过来之后,接受完毕就要解码了——urldecode。urllib提供了unquote()这个函数,可没有urldecode()!
import urllib.parse surl='%E6%9D%AD%E5%B7%9E' surl=urllib.parse.unquote(surl) print(surl) 结果: 杭州
posted on 2021-03-17 17:33 Test-Admin 阅读(767) 评论(0) 编辑 收藏 举报