代码之家  ›  专栏  ›  技术社区  ›  Elie

Python请求:带有百分比字符的URL

  •  3
  • Elie  · 技术社区  · 9 年前

    我一直在到处寻找这个,但我无法解决我的问题。

    我使用本地API获取一些数据,在该API中,通配符是百分比字符 % .

    URL如下所示: urlReq = 'http://myApiURL?ID=something&parameter=%w42'

    然后我把这个传递给get函数:

    req = requests.get(urlReq,auth=HTTPBasicAuth(user, pass))

    并得到以下错误: InvalidURL: Invalid percent-escape sequence: 'w4'

    我试着逃离 % 字符使用 %%

    urlReq = 'http://myApiURL?ID=something&parameter=%sw42' % '%' 但效果不太好。

    PS:我正在使用 Python 2.7.8::Anaconda 1.9.1(64位)

    4 回复  |  直到 9 年前
        1
  •  4
  •   Maurice    9 年前

    你应该看看 urllib.quote -这应该会成功的。看看 docs 供参考。

    为了扩展这个答案:问题是 % (+十六进制数)是 escape sequence 用于URL中的特殊字符。如果希望服务器解释 % 从字面上讲,您也需要对其进行转义,这是通过将其替换为 %25 前面提到的Qout函数为您做了类似的事情。

        2
  •  4
  •   mhawke    9 年前

    允许 requests params 争论 requests.get() ( see documentation ):

    api_url = 'http://myApiURL'
    params = {'ID': 'something', 'parameter': '%w42'}
    r = requests.get(api_url, params=params, auth=(user, pass))
    

    请求 然后应该对查询字符串中的参数进行百分比编码。话虽如此,至少 请求 在我的机器上的版本2.11.1,我发现 % 在url中传递时进行编码,因此您可能可以检查正在使用的版本。

    此外,对于基本身份验证,您可以简单地在元组中传递用户名和密码,如上所示。

        3
  •  3
  •   Hisham Karam    9 年前

    在里面 requests 你应该使用 requests.compat.quote_plus take alook

    例子:

    >>> requests.compat.quote_plus('example: parameter=%w42')
    'example%3A+parameter%3D%25w42'
    
        4
  •  0
  •   Elie    9 年前

    @Tryph的信用:

    %用于对URL中的特殊字符进行编码。您可以使用此序列%25对%字符进行编码。有关详细信息,请参阅此处: w3schools.com/tags/ref_urlencode.asp

    推荐文章