调试请求错误



我有一个应用程序,它利用请求访问API(Discogs(数据库。我希望能够在.get命令期间看到 URL 请求实际请求的内容,以解决以下问题:

当我手动使用 HTTP 请求通过输入以下 URL 从迪斯科获取数据时:

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(带有参数(,以便我可以自己调试?

要在发送请求之前检查请求,您可以对其进行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´

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}]}

所以对我来说,如果没有设置额外的标题,URL 肯定会按预期工作。

最新更新