POCO Net C++ ライブラリのプロキシ認証
-
19-09-2019 - |
質問
私はしばらく Poco Net ライブラリを使って遊んでいますが、これは非常に素晴らしいです。とても便利でわかりやすいです。
プロキシアドレスは設定できましたが、ちゃんと「407 Proxy authorization required」と表示されます。私はそう思いました
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
req.setCredentials(scheme, authInfo);
スキームの「basic」、「plaintext」、authInfo の「user:password」などの値を試しました。うまくいかないようです。Googleは役に立ちません。
これまでに Poco Net を使用してこれを行った人はいますか?それとも、使用方法は明らかですが、プロキシ認証全般についての無知のせいでそれを機能させることができないのでしょうか?ご意見をお聞かせください。
編集: もう少し遊んでみたところ、setCredentials 関数は、リモート サーバーがログインするための認証情報を期待しているときに使用されると思います。Poco Net ライブラリを使用してプロキシ認証を行う方法が見つかりませんでした。プロキシサーバーとポートを設定することはできました。認証なしのプロキシ サーバーだけが存在する場合は、次のようになります。
HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.setProxy("host", port);
session.sendRequest(req);
助けが必要。
編集: @StackedCrookedが提案した解決策に基づいて、リクエストを行う前にリクエストヘッダーにプロキシ認証の詳細を設定しようとしました。インターネットで見つかった別のアプローチでは、最初のリクエストを行った後にのみプロキシ認証の詳細を設定し、407エラーが発生しました。そして再度リクエストを行います。どちらの方法でも同じ 407 エラーが発生し続けました。私の現在のコードは次のようになります。
HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.setProxy("10.7.128.1", 8080);
req.set("Proxy-Authentication", "Basic bGVlbGE6bGVlbGExMjM=");
session.sendRequest(req);
解決
おそらく、HTTP ヘッダーに Proxy Authorization フィールドを追加する必要があります。Poco の HTTPRequest クラスには、これのための専用メソッドがありません。ただし、NameValueCollection クラスをパブリックに継承しているため、次のように設定できます。
req.set("Proxy-Authorization" , "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");
どこ QWxhZGRpbjpvcGVuIHNlc2FtZQ==
これは、「Aladdin:open sinner」の Base64 エンコード版です。
HTTP プロトコルについて少し学ぶと、これらの問題の多くは簡単になります。私は今、ほとんど自分自身に説教しています:)
他のヒント
私自身はこれを使用したことがありませんが、ご覧になりましたか? HTTPBasic資格情報 クラス?これにより、authenticate メソッドを介して req.setCredentials への呼び出しが終了します。最終的には次のような結果になります。
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
HTTPBasicCredentials cred("user", "password");
cred.authenticate(req);