2014-12-05 169 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