在Python请求中转义反斜杠
问题描述:
我试图访问其中一个参数的名称为\
(Axwell /\ Ingrosso
)的API。在Python请求中转义反斜杠
如果我直接使用网站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字符串常量,反斜杠开始越狱序列和\\
表示逃逸序列,例如常规反斜线字符没有特定含义:由requests
产生
>>> 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'
感谢您的详细说明。但由于某种奇怪的原因,相同的代码适用于本地计算机,但无法在我的服务器计算机上运行。任何线索? – 2014-12-05 12:43:23
@YinYang:在这里定义'不起作用'。 API响应告诉你什么是错误的? – 2014-12-05 12:46:16
它仍然在服务器上输出一个空的响应。虽然我在本地机器上得到了相同代码的响应。 – 2014-12-05 12:49:58