3

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

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

网址是这样的: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

4 回答 4

4

你应该看看urllib.quote- 这应该可以解决问题。查看文档以供参考。

扩展这个答案:问题是,%(+ 一个十六进制数)是 URL 中特殊字符的转义序列。如果您希望服务器解释您的%文字,您还需要对其进行转义,这是通过将其替换为%25. 前面提到的 qoute 函数会为你做类似的事情。

于 2016-10-21T07:46:39.593 回答
4

让我们requests通过将参数中的params参数传递给requests.get()请参阅文档)为您构造查询字符串:

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

requests然后应该为您对查询字符串中的参数进行百分比编码。话虽如此,至少requests在我的机器上使用 2.11.1 版本时,我发现%在 url 中传递它时会对其进行编码,所以也许你可以检查你使用的是哪个版本。

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

于 2016-10-21T08:24:41.250 回答
3

requests你应该使用requests.compat.quote_plus这里的看看

例子 :

>>> requests.compat.quote_plus('example: parameter=%w42')
'example%3A+parameter%3D%25w42'
于 2016-10-21T07:55:13.040 回答
0

@Tryph 的学分:

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

于 2016-10-21T07:55:09.413 回答