Различные статьи (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
, результатом будет сообщение 400 Bad Request со следующим в журналах сервера (работает Apache 2.2):
Digest: uri mismatch - </test> does not match request-uri </test?page=xyz>
Моя первая идея заключалась в том, что спецификация дайджеста требует, чтобы параметры URL были удалены из хэша дайджеста, но удаление параметра из URL-адреса, переданного в credentialCache.Add()
, не изменило ничего. Так что это должно быть наоборот, и где-то в .NET Framework неправильно удаляет параметр из URL.