我一直在寻找这个地方,但我无法解决我的问题。
我使用本地API来获取某些数据,在该API中,通配符是字符%%
。
网址如下:urlReq = 'http://myApiURL?ID=something¶meter=%w42'
然后我将它传递给get函数:
req = requests.get(urlReq,auth=HTTPBasicAuth(user, pass))
并收到以下错误:InvalidURL: Invalid percent-escape sequence: 'w4'
我尝试使用%
转义%%
字符,但徒劳无功。我也尝试了以下内容:
urlReq = 'http://myApiURL?ID=something¶meter=%sw42' % '%'
但效果不佳。
有谁知道如何解决这个问题?
PS我正在使用 Python 2.7.8 :: Anaconda 1.9.1(64位)
答案 0 :(得分:4)
你应该看看urllib.quote
- 应该这样做。请查看docs以供参考。
要扩展此答案:问题是,%
(+十六进制数字)是网址中特殊字符的escape sequence。如果您希望服务器明确地解释您的%
,您也需要将其转义,这可以通过将其替换为%25
来完成。前面提到的qoute函数为你做了类似的事情。
答案 1 :(得分:3)
让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))
然后 requests
应该对查询字符串中的参数进行百分比编码。话虽如此,至少在我的机器上使用requests
版本2.11.1,我发现%
在网址中传递时会被编码,所以也许您可以查看您正在使用的版本。
同样,对于基本身份验证,您只需在元组中传递用户名和密码,如上所示。
答案 2 :(得分:1)
requests
中您应该使用requests.compat.quote_plus
这里的take alook
示例:
>>> requests.compat.quote_plus('example: parameter=%w42')
'example%3A+parameter%3D%25w42'
答案 3 :(得分:0)
致@Tryph的信用:
%用于编码网址中的特殊字符。您可以使用此序列%25对%字符进行编码。有关详细信息,请参阅此处:w3schools.com/tags/ref_urlencode.asp