代码之家  ›  专栏  ›  技术社区  ›  Saqib Ali

如何在使用python的urllib时转义某些字符。urlencode()?

  •  0
  • Saqib Ali  · 技术社区  · 6 年前

    我有一个字典,我想把它编码成查询参数。 我正在访问的服务器希望查询如下所示: http://www.example.com?A=B,C

    但当我尝试使用 urllib.urlencode 为了构建URL,我发现逗号变成了 %2C :

    >>> import urllib
    >>> urllib.urlencode({"A":"B,C"})
    'A=B%2CC'
    

    我有没有办法避开逗号,这样 urlencode 把它当成正常的角色?

    如果没有,我如何解决这个问题?

    1 回复  |  直到 6 年前
        1
  •  1
  •   halfer    6 年前

    可以通过添加 query params 在到达终点之前作为一根绳子。

    我用过 requests 感谢你提出请求。

    例如:

    GET Request
    
    import requests
    
    url = "https://www.example.com/?"
    query = "A=B,C"
    
    url_final = url + query
    
    url  = requests.get(url_final)
    
    print(url.url)
    # https://www.example.com/?A=B,C
    
    

    逗号(以及其他一些字符)在中定义 RFC 3986 作为一个保守的角色。这意味着逗号在URL的各个部分都有定义的含义,如果没有在该上下文中使用,则需要对其进行百分比编码。

    也就是说 query parameter 没有给逗号任何特殊语法,所以在查询参数中,我们可能不应该对其进行编码。也就是说,这不完全是请求的错:参数是使用 urllib.urlencode() ,这是对查询参数进行编码的百分比。

    但这并不容易修复,因为有些web服务使用 , 还有一些用处 %2C ,两者都没有错。你可能只需要自己处理这个编码。

        2
  •  1
  •   Vipin Joshi    6 年前

    通过将某些字符显式指定为安全参数值,可以对其进行转义

    urllib.quote(str, safe='~()*!.\'')
    

    更多: https://docs.python.org/3.0/library/urllib.parse.html#urllib.parse.quote