0

リクエストを利用して API の (Discogs) データベースにアクセスするアプリがあります。.get次の問題を解決するために、コマンド中に実際にどの URL リクエストがリクエストされているかを確認できるようにしたいと考えています。

次の URL を入力して、手動で 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 を (パラメータを使用して) 生成し、自分でデバッグできるようにする方法を誰か教えてもらえますか?

4

2 に答える 2

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´
于 2013-02-04T18:25:26.507 に答える
1

requestsライブラリはライブラリを使用し、ライブラリurllib3は標準の pythonloggingライブラリを使用してデバッグ メッセージをログに記録します。次の構成は、実行されている正確な要求を示します。

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 は確実に期待どおりに機能します。

于 2013-02-04T18:03:55.663 に答える