5

HttpWebRequestを使用して、ユーザー名とパスワードを必要とするhttpsURIを取得しようとしています。URIをブラウザに入れると、クレデンシャルを要求するダイアログがポップアップ表示され、機能します。HttpWebRequestを使用すると、401Unauthorizedエラーが発生します。

NetworkCredentialsのドキュメントには、SSLがサポートされていないと記載されていますが、使用するものが見つかりません。

4

1 に答える 1

6

サーバーは HTTP 基本認証またはその他の種類の認証を使用していますか? HTTP Basic を使用している場合はCredentials、Web 要求のプロパティを正しいユーザー名とパスワードを含む資格情報に設定し、PreAuthenticateプロパティを true に設定できます。

以下に例を示します (テストされていないため、ガイドラインとしてのみ使用してください)。

var uri = new Uri("https://somesite.com/something");
var request = WebRequest.Create(uri) as HttpWebRequest;
request.Credentials = new NetworkCredential("myUserName","myPassword");
request.PreAuthenticate = true;

var response = request.GetResponse();

注: これを行った私の経験では、.NET フレームワークにはいくつかの奇妙な動作があります。コードが言うことをするべきだと思うかもしれませんが、実際にはこれを行います:

  • 認証情報なしでサーバーにリクエストを送信する
  • サーバーは 401 で応答します
  • 指定した資格情報を使用してリクエストを再送信します
  • サーバーはリクエストを受け入れます。

壊れているように見えるので、なぜこれを行うのかわかりません。おそらく、それは私のマシンの癖であり、あなたには起こらないでしょう.

アプリがパフォーマンスに敏感でなく、リクエストが大きなデータの POSTS ではない場合、おそらく気付かないでしょうが、それを回避するには、手動で HTTP 基本認証ヘッダーを作成し、HttpWebRequest操作して手動で設定する必要がありました。Headersコレクション。

于 2009-06-03T21:00:37.023 に答える