在Python请求中转义反斜杠
我试图访问一个API,其中一个参数的名称中有一个在Python请求中转义反斜杠,python,python-requests,Python,Python Requests,我试图访问一个API,其中一个参数的名称中有一个\(Axwell/\Ingrosso) 如果我直接使用网站API面板访问API,我将使用Axwell/\\Ingrosso获得结果 然后请求URL变为https://oauth-api.beatport.com/catalog/3/tracks?facets=artistName%3AAxwell+%2F%5C%5C+Ingrosso&perPage=150 如果我尝试使用Python请求访问相同的API端点,则会得到一个空响应 这就是我正在尝试的
\
(Axwell/\Ingrosso
)
如果我直接使用网站API面板访问API,我将使用Axwell/\\Ingrosso
获得结果
然后请求URL变为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请求中不使用反斜杠来使用它,但即使这样也会输出一个空响应。我在这里遗漏了什么?您需要将反斜杠加倍:
'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
或作为请求生成的编码URL
:
>>> 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'
谢谢你的详细解释。但出于某种奇怪的原因,相同的代码适用于我的本地机器,但不适用于我的服务器机器。有什么线索吗?@YinYang:在这里定义“不起作用”。API响应告诉您什么是错误的?它仍然在服务器上输出空响应。虽然我在本地计算机上收到了对相同代码的响应。@阴阳:如果您在两台计算机上运行完全相同的请求(相同的标题、相同的查询参数等),那么您可能需要联系Beatport。请确保您100%确定发送了相同的请求。您可以使用记录每个请求的一些详细信息(实际上是URL路径),以便进行比较。