2013-02-04 64 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}]} 
所以对我来说

,无需额外设置标题,网址当然可以作为预期。