私が発見したさまざまな記事 ( 1、2 ) により、これは十分に簡単に見えます。
WebRequest request = HttpWebRequest.Create(url);
var credentialCache = new CredentialCache();
credentialCache.Add(
new Uri(url), // request url
"Digest", // authentication type
new NetworkCredential("user", "password") // credentials
);
request.Credentials = credentialCache;
ただし、これは URL パラメーターのない URL に対してのみ機能します。たとえば、問題なくダウンロードできますhttp://example.com/test/xyz.html
が、ダウンロードしようとするhttp://example.com/test?page=xyz
と、サーバーのログ (Apache 2.2 を実行) に次のような 400 Bad Request メッセージが表示されます。
Digest: uri mismatch - </test> does not match request-uri </test?page=xyz>
私の最初の考えは、ダイジェスト仕様ではダイジェスト ハッシュから URL パラメーターを削除する必要があるというものでしたが、渡された URL からパラメーターを削除してcredentialCache.Add()
も何も変わりませんでした。そのため、逆である必要があり、.NET フレームワークのどこかで URL からパラメーターが誤って削除されています。