zoukankan      html  css  js  c++  java
  • 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 中不能包含 @ 字符。
     
    编码原理:
    将需要转码的字符转为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)
    
    结果:
    杭州

  • 相关阅读:
    Button 使用Command 按钮置灰未更新
    C# TextBox 焦点
    MultiTigger 绑定异常处理
    C# 获取程序路径
    Linux 权限设置chmod
    WPF SpreadSheetGear电子表单
    WPF 窗口
    Excel公式 提取文件路径后缀
    C#/VB.NET 获取电脑属性(硬盘ID、硬盘容量、Cpu序列号、MAC地址、系统类型)
    DevExpress Carousel 设置水平滑动列表
  • 原文地址:https://www.cnblogs.com/renshengruxi/p/14550733.html
Copyright © 2011-2022 走看看