Python 请求:URL 带有百分比字符
Python requests: URL with percent character
我到处搜索这个,但我无法解决我的问题。
我正在使用本地 API 来获取一些数据,其中 API,通配符是百分比字符 %
。
URL是这样的: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 位)
您应该看看 urllib.quote
- 应该可以解决问题。看看 docs 以供参考。
扩展此答案:问题是,%
(+ 十六进制数)是 URL 中特殊字符的 escape sequence。如果您希望服务器解释您的 %
文字,您也需要将其转义,方法是将其替换为 %25
。前面提到的 qoute 函数会为您做类似的事情。
感谢@Tryph:
% 用于对 url 中的特殊字符进行编码。您可以使用此序列 %25 对 % 字符进行编码。有关更多详细信息,请参见此处:w3schools.com/tags/ref_urlencode.asp
在 requests
你应该使用 requests.compat.quote_plus
这里是 take alook
示例:
>>> requests.compat.quote_plus('example: parameter=%w42')
'example%3A+parameter%3D%25w42'
让 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,我发现 %
在 url 中传递时被编码,所以也许你可以检查你的版本正在使用。
对于基本身份验证,您也可以简单地在元组中传递用户名和密码,如上所示。
我到处搜索这个,但我无法解决我的问题。
我正在使用本地 API 来获取一些数据,其中 API,通配符是百分比字符 %
。
URL是这样的: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 位)
您应该看看 urllib.quote
- 应该可以解决问题。看看 docs 以供参考。
扩展此答案:问题是,%
(+ 十六进制数)是 URL 中特殊字符的 escape sequence。如果您希望服务器解释您的 %
文字,您也需要将其转义,方法是将其替换为 %25
。前面提到的 qoute 函数会为您做类似的事情。
感谢@Tryph:
% 用于对 url 中的特殊字符进行编码。您可以使用此序列 %25 对 % 字符进行编码。有关更多详细信息,请参见此处:w3schools.com/tags/ref_urlencode.asp
在 requests
你应该使用 requests.compat.quote_plus
这里是 take alook
示例:
>>> requests.compat.quote_plus('example: parameter=%w42')
'example%3A+parameter%3D%25w42'
让 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,我发现 %
在 url 中传递时被编码,所以也许你可以检查你的版本正在使用。
对于基本身份验证,您也可以简单地在元组中传递用户名和密码,如上所示。