2014-12-05 166 views
0

我试图访问其中一个参数的名称为\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请求反斜杠但即使输出空响应。我在这里错过了什么?

回答

2

您需要反斜线:

'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' 
+0

感谢您的详细说明。但由于某种奇怪的原因,相同的代码适用于本地计算机,但无法在我的服务器计算机上运行。任何线索? – 2014-12-05 12:43:23

+0

@YinYang:在这里定义'不起作用'。 API响应告诉你什么是错误的? – 2014-12-05 12:46:16

+0

它仍然在服务器上输出一个空的响应。虽然我在本地机器上得到了相同代码的响应。 – 2014-12-05 12:49:58