逃避Python请求中的反斜杠

时间:2014-12-05 12:29:06

标签: python python-requests

我尝试访问其中一个参数中包含\名称(Axwell /\ Ingrosso)的API。

如果我直接使用网站API面板访问API,我会使用Axwell /\\ Ingrosso获得结果。

请求网址变为https://oauth-api.beatport.com/catalog/3/tracks?facets=artistName%3AAxwell+%2F%5C%5C+Ingrosso&perPage=150

如果我尝试使用Python请求访问同一个API端点,我会得到一个空响应。

这就是我正在尝试的

r = session.get('https://oauth-api.beatport.com/catalog/3/tracks', 
               params={'facets': 'artistName:Axwell /\\ Ingrosso', 
                       'perPage': 150})

我也尝试过在Python请求中没有反斜杠的情况下使用它,但即使这样也会输出一个空响应。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

你需要加倍反斜杠:

'artistName:Axwell /\\\\ Ingrosso'

或通过在字符串文字前加r

来使用原始字符串文字
r'artistName:Axwell /\\ Ingrosso'

在Python字符串文字中,反斜杠开始转义序列,\\表示转义的转义序列,例如一个没有特定含义的常规反斜杠字符:

>>> print 'artistName:Axwell /\\ Ingrosso'
artistName:Axwell /\ Ingrosso
>>> print 'artistName:Axwell /\\\\ Ingrosso'
artistName:Axwell /\\ Ingrosso
>>> print r'artistName:Axwell /\\ Ingrosso'
artistName:Axwell /\\ Ingrosso

requests生成的编码网址:

>>> import requests
>>> requests.Request('GET',
...     'https://oauth-api.beatport.com/catalog/3/tracks',
...     params={'facets': 'artistName:Axwell /\\ Ingrosso',
...             'perPage': 150}).prepare().url
'https://oauth-api.beatport.com/catalog/3/tracks?facets=artistName%3AAxwell+%2F%5C+Ingrosso&perPage=150'
>>> requests.Request('GET',
...     'https://oauth-api.beatport.com/catalog/3/tracks',
...     params={'facets': 'artistName:Axwell /\\\\ Ingrosso',
...             'perPage': 150}).prepare().url
'https://oauth-api.beatport.com/catalog/3/tracks?facets=artistName%3AAxwell+%2F%5C%5C+Ingrosso&perPage=150'
>>> requests.Request('GET',
...     'https://oauth-api.beatport.com/catalog/3/tracks',
...     params={'facets': r'artistName:Axwell /\\ Ingrosso',
...             'perPage': 150}).prepare().url
'https://oauth-api.beatport.com/catalog/3/tracks?facets=artistName%3AAxwell+%2F%5C%5C+Ingrosso&perPage=150'