2013-02-04 62 views
0

我有一個應用程序利用請求來訪問API(Discogs)數據庫。我希望能夠看到什麼URL請求.get命令期間實際上是要求解決以下問題:調試請求錯誤

當我手動使用HTTP請求通過輸入以下網址獲得來自discogs數據:

http://api.discogs.com/database/search?type=master&year=2007&format=album&artist=Radiohead 

我以JSON格式收到結果。然而,當我以下列方式使用要求:

uri = http://api.discogs.com/database/search 
parameters = {'format': 'album', 'year': '2008', 'type': 'master', 'page': 1, 'artist': 'Radiohead'} 
headers = (personal information redacted) 
requests.get(uri, params=parameters, headers=self._headers) 

我沒有得到任何結果(這是通過解析的結果,並返回它們作爲對象discogs客戶包裝 - 解析,這是我不包括在這段代碼中,似乎工作正常,我已經隔離問題的請求)。

任何人都可以告訴我我的.get請求有什麼問題,或告訴我如何使用請求來生成它實際請求的URL(使用參數),以便我可以自行調試?

回答

2

要檢查請求之前它發送你可以prepare它。

req = requests.Request(url=uri, params=params, headers=headers) 
prep = req.prepare() 
print(prep.url) 

打印

http://api.discogs.com/database/search?year=2008&type=master&page=1&format=album&artist=Radiohead´ 
+0

難道你看看這個:https://github.com/discogs/discogs_client –

1

requests庫使用urllib3庫,該庫依次使用標準python logging庫來記錄調試消息。下面的配置會告訴你正在運行什麼確切的請求:

import logging 
logging.basicConfig(level=logging.DEBUG) 

此配置logging模塊stderr上顯示調試級消息(及以上)。

運行您的示例URL和參數,我看到:

>>> import logging 
>>> import requests 
>>> logging.basicConfig(level=logging.DEBUG) 
>>> uri = 'http://api.discogs.com/database/search' 
>>> parameters = {'format': 'album', 'year': '2008', 'type': 'master', 'page': 1, 'artist': 'Radiohead'} 
>>> r = requests.get(uri, params=parameters) 
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): api.discogs.com 
DEBUG:requests.packages.urllib3.connectionpool:"GET /database/search?artist=Radiohead&year=2008&type=master&page=1&format=album HTTP/1.1" 200 379 
>>> r.json() 
{u'pagination': {u'per_page': 50, u'items': 1, u'pages': 1, u'urls': {}, u'page': 1}, u'results': [{u'style': [u'Experimental', u'Indie Rock'], u'thumb': u'http://api.discogs.com/image/R-90-1379425-1214572945.jpeg', u'format': [u'File', u'MPEG-4', u'Album', u'Copy Protected'], u'country': u'UK', u'title': u'Radiohead - In Rainbows - From The Basement', u'uri': u'/Radiohead-In-Rainbows-From-The-Basement/master/97298', u'label': [u'_Xurbia_Xendless Limited'], u'catno': u'none', u'year': u'2008', u'genre': [u'Electronic', u'Rock'], u'resource_url': u'http://api.discogs.com/masters/97298', u'type': u'master', u'id': 97298}]} 
所以對我來說

,無需額外設置標題,網址當然可以作爲預期。