2009-06-03 15 views
5

HttpWebRequestを使用して、ユーザー名とパスワードが必要なhttps URIを取得しようとしています。 URIをブラウザに置くと、資格情報を要求するダイアログがポップアップして動作します。 HttpWebRequestを使用すると、401 Unauthorizedエラーが発生します。クライアントの資格情報を持つSSLによるHttpWebRequest

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

答えて

5

サーバーはHTTP基本認証などを使用していますか? HTTPベーシックを使用している場合は、WebリクエストのCredentialsプロパティを正しいユーザ名とパスワードを含むクレデンシャルに設定し、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フレームワークにおけるいくつかの奇妙な振る舞いがあります。あなたはそれがコードが言う何をすべきだと思うだろうが、それは実際にこのん:資格情報

  • Serverはあなたが与えた資格情報を使用して401
  • 再送信要求に応答しないと

    • はサーバーにリクエストを送りますそれは
    • サーバーは要求を受け入れます。

    壊れているように見える理由はわかりません。おそらくそれは私のマシンの奇抜であり、おそらくあなたには起こりません。

    あなたのアプリがパフォーマンスに敏感ではなく、リクエストが大規模なデータのPOSTSでない場合は気づかないかもしれませんが、回避するために、手動でHTTP基本認証ヘッダーを作成し、 Headersコレクションを手動で操作してHttpWebRequestを手動で削除します。

  • +0

    あなたが記述する動作は、* nixのwgetと同じ動作だと思います。一度試行して失敗し、資格情報を送信して成功します。 – Stephan

    +0

    これはhttp specの一部である何らかのチャレンジリクエストシーケンスだと思います。 – MGOwen

    関連する問題