問題タブ [wiremock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - wgetでHTTPSプロキシの失敗をデバッグするには?
(これはこの質問の続きで、ある問題を解決して別の問題を見つけました)。
WireMock プロキシ経由で wget を使用して HTTPS Web サイトを取得しています。以下は、安全なデモ サイトを指すフェッチ コマンドです。
これが私のプロキシ設定です:
WireMock の画面上のログには、次のように記載されています。
結果は次のとおりです。
ご覧のとおり、フェッチは失敗し、自動的に再試行され、終了するにはキャンセルする必要があります。
--preserve-host-header
WireMock コマンド (スタンドアロン ドキュメントはこちら) で試しましたが、結果は同じです。
有効な HTTPS 証明書ストアを指す必要があるため、プロキシが内部的に失敗しているのだろうか? そうは言っても、実行中のプロキシが何か (エラーも含む) を出力していると思いますが、呼び出しをまったく処理していないようです。同等の HTTP 呼び出しは正常に機能します。
Wget が失敗する理由を確認するためにできることはありますか? エラー メッセージはあまり役に立ちません。私の知る限り、これ以上詳細にすることはできません (詳細設定は wget でデフォルトでオンになっています)。
この動作は、Alpine 3.4 (Docker コンテナー内) と Ubuntu 14.04 VM で実行されている間で同じです。また、WireMock 2.4.1、2.5.0、および 2.5.1 でも同じです。
証明書を試す
ブラウザ (Firefox) の HTTPS プロキシ設定を WireMock を指すように切り替えようとしましたが、取得しようとしている Web サイトで証明書が正しくないために失敗します。興味深いことに、Firefox がリモート サーバーに接続しているように見えても、WireMock は stdout に何も出力しません。
Wiremock の組み込みのキーストアが古くなっているのか、それとも空なのか疑問に思っていたので、「実際の」証明書ストアを指定する方法を学ぶことが、おそらく次に試す価値のあることでした。これらの手順を使用してブラウザの証明書ファイルを JKS 形式に変換しましたが、これは Wget でも Firefox でも違いはありませんでした。
新しく作成したキーストアは 955 バイトですが、元の PEM 証明書ファイルは ~260K であるため、すべての証明書が追加されたわけではないことは明らかです (最初の証明書が追加されただけなのでしょうか?)。FWIW私はこのコマンドを使用しました:
プロキシに到達していることを確認しています
HTTPS プロキシが必要なときに何かが発生していることを証明するために、呼び出しに-verbose
and-verbose:jni
スイッチを追加しました。java
Wget コマンドを実行すると、実際のエッセイが出力されるので、HTTPS プロキシがヒットしていると確信しています。Wget は、HTTP モードでも正常にフェッチされます。
スタンドアロンの Jar ファイルで何が起こっているかをログに記録する方法は?
私はあらゆる種類のことをやみくもに試すことができる段階にあり、Java システムが失敗する理由を最初に確認するために、Java システムからある程度の情報を取得する必要があると思います。私の推測では、Wget ではなく Wiremock が問題であると思われます。
文書化されていない Wiremock の機能を見つけました。これは次の機能--print-all-network-traffic
を提供します。
2 番目のセクションは、wget が再試行する回数だけ繰り返されますが、ここでも有用なものは何もありません。なぜ失敗するのか知りたいです。
に追加できるログ パラメータjava -jar
はありますか? または、参照できる Java のシステム全体のエラー ログはありますか? VisualVM をインストールしましたが、さまざまな出力があまり関連していないようです。私は例外に最も興味があると思いますか?