• python接口自动化(二十五) urlencode编码%E7%94%9F%E6%B4%BB与解码


    前言

    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的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。

    requests 自动对url urlencode编码

    先看一个python请求案例

    import requests
    url="http://www.example.com/"
    par={
        "a":"武汉",
        "b":"生活"
    }
    body={
        "content":"绿萝",
        "en":"编码"
    }
    r=requests.post(url,params=par,data=body)
    print(r.url)
    

     运行结果

    http://www.example.com/?a=%E6%AD%A6%E6%B1%89&b=%E7%94%9F%E6%B4%BB
    

    在浏览器中打开上面的结果

     

     会发现传过去的request部分,是经过了urlencode编码的(编码的操作,requests库已经帮我们自动处理了,这就是requests人性化的地方)

    urlencode 、quote编码

    如果我们想自己操作,对字符串传入的字典参数进行urlencode编码,就需要用到两个方法urlencode和quote

    urlencode方法字典参数

    from urllib.parse import urlencode,quote,unquote
    b={
        "content":"夏天",
        "温度":"高"
    }
    print(urlencode(b))
    

     运行结果:

    content=%E5%A4%8F%E5%A4%A9&%E6%B8%A9%E5%BA%A6=%E9%AB%98
    

    quote方法字符串参数

    from urllib.parse import urlencode,quote,unquote
    print(quote("夏天"))
    url="http://www.example.com/?a=武汉&b=夏天"
    print(quote(url))  

     运行结果:

    %E5%A4%8F%E5%A4%A9
    http%3A//www.example.com/%3Fa%3D%E6%AD%A6%E6%B1%89%26b%3D%E5%A4%8F%E5%A4%A9
    

     unquote解码

    如果返回的数据里面有urlencode编码的字符串,类似于 %E5%A4%8F%E5%A4%A9这种格式,可以使用unquote方法解码

    import requests
    from urllib.parse import urlencode,quote,unquote
    url="http://www.example.com/"
    p={
        "season":"夏天",
        "温度":"39"
    }
    r=requests.get(url,params=p)
    print(r.url)
    print(unquote(r.url))  

     运行结果

    http://www.example.com/?season=%E5%A4%8F%E5%A4%A9&%E6%B8%A9%E5%BA%A6=39
    http://www.example.com/?season=夏天&温度=39
    

      

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    Kafka生产者Producer配置 ,及C#中使用学习资料连接
    Oracle expdb异地备份
    查询redis当前连接数据和当前信息
    Oracle在sqldeveloper中按格式显示日期数据
    DB行转列
    2019.9.10面试反思
    配置webpack4
    代理
    es6 promise
    es6 symbol
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13451393.html
Copyright © 2020-2023  润新知