[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
質問
pythonを使っています。
リクエスト
. をデバッグする必要があります。
OAuth
アクティビティのデバッグをする必要があり、そのために実行されたすべてのリクエストを記録することが望まれます。私はこの情報を
ngrep
でこの情報を得ることができますが、残念ながらhttps接続をgrepすることはできません(これは
OAuth
)
どのようにしたら、以下のようなURL(+パラメータ)のロギングを有効にできますか?
Requests
がアクセスするすべての URL (+ パラメータ) のロギングを有効にするにはどうしたらよいでしょうか?
どのように解決するのですか?
基礎となる
urllib3
ライブラリはすべての新しい接続と URL を
logging
モジュール
でなく
POST
のボディは含まない。については
GET
リクエストではこれで十分でしょう。
import logging
logging.basicConfig(level=logging.DEBUG)
これは最も詳細なロギングオプションを与えるものです。 ロギング HOWTO を参照してください。
短いデモです。
>>> import requests
>>> import logging
>>> logging.basicConfig(level=logging.DEBUG)
>>> r = requests.get('http://httpbin.org/get?foo=bar&baz=python')
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): httpbin.org:80
DEBUG:urllib3.connectionpool:http://httpbin.org:80 "GET /get?foo=bar&baz=python HTTP/1.1" 200 366
urllib3 の正確なバージョンによって、以下のメッセージが記録されます。
-
INFO
: リダイレクト -
WARN
: 接続プールが一杯です(頻繁に発生する場合は、接続プールのサイズを大きくしてください)。 -
WARN
: ヘッダの解析に失敗しました(無効な形式のレスポンスヘッダ)。 -
WARN
: 接続を再試行する -
WARN
: 証明書は期待されたホスト名と一致しませんでした -
WARN
: チャンクされた応答を処理する際に、Content-Length と Transfer-Encoding の両方を含む応答を受信しました。 -
DEBUG
: 新規接続 (HTTP または HTTPS) -
DEBUG
: 接続を切断しました -
DEBUG
: 接続の詳細: メソッド、パス、HTTP バージョン、ステータスコード、レスポンスの長さ -
DEBUG
: リトライ回数インクリメント
ヘッダーやボディは含まれません。
urllib3
は
http.client.HTTPConnection
クラスを使いますが、このクラスはロギングをサポートしません。
印刷
を標準出力に出力するようにしか設定できません。しかし、ロギングにすべてのデバッグ情報を送るように設定することができます。
print
という名前をそのモジュールに導入することで、すべてのデバッグ情報をロギングに送るようにすることができます。
import logging
import http.client
httpclient_logger = logging.getLogger("http.client")
def httpclient_logging_patch(level=logging.DEBUG):
"""Enable HTTPConnection debug logging to the logging framework"""
def httpclient_log(*args):
httpclient_logger.log(level, " ".join(args))
# mask the print() built-in in the http.client module to use
# logging instead
http.client.print = httpclient_log
# enable debugging
http.client.HTTPConnection.debuglevel = 1
呼び出し
httpclient_logging_patch()
原因
http.client
接続はすべてのデバッグ情報を標準ロガーに出力し、そのため
logging.basicConfig()
:
>>> httpclient_logging_patch()
>>> r = requests.get('http://httpbin.org/get?foo=bar&baz=python')
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): httpbin.org:80
DEBUG:http.client:send: b'GET /get?foo=bar&baz=python HTTP/1.1\r\nHost: httpbin.org\r\nUser-Agent: python-requests/2.22.0\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\n\r\n'
DEBUG:http.client:reply: 'HTTP/1.1 200 OK\r\n'
DEBUG:http.client:header: Date: Tue, 04 Feb 2020 13:36:53 GMT
DEBUG:http.client:header: Content-Type: application/json
DEBUG:http.client:header: Content-Length: 366
DEBUG:http.client:header: Connection: keep-alive
DEBUG:http.client:header: Server: gunicorn/19.9.0
DEBUG:http.client:header: Access-Control-Allow-Origin: *
DEBUG:http.client:header: Access-Control-Allow-Credentials: true
DEBUG:urllib3.connectionpool:http://httpbin.org:80 "GET /get?foo=bar&baz=python HTTP/1.1" 200 366
関連
-
[解決済み] urllib、urllib2、urllib3、requestsモジュールの違いは何ですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] Python RequestsでJSONデータをPOSTする方法とは?
-
[解決済み] Pythonのリクエストモジュールを使ってtry/exceptする正しい方法?
-
[解決済み] Requestsライブラリからのログメッセージを無効にするにはどうすればよいですか?
-
[解決済み] Pythonでnumpy.linalg.eigを使用した後の固有値と関連する固有ベクトルのソート
-
[解決済み] 条件を満たした場合にNumpyの要素を置き換える
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] タプルの代わりにリストで出力するZip
-
[解決済み] なぜPython 3.5はPython 3.4に比べてstr.translateがずっと速いのですか?