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

Python requests: URL with percent character

我到处搜索这个,但我无法解决我的问题。

我正在使用本地 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 位)

您应该看看 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 中传递时被编码,所以也许你可以检查你的版本正在使用。

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