我目前使用HttpWebRequest
获取网站。我想使用等待模式,但HttpWebRequests
不支持此模式。我找到了一个新的 Http worker 类 HttpClient
。我正在使用HttpClient.GetAsync(...)
查询我的网页。但是我缺少添加ClientCredentials
的选项,类似于HttpWebRequest.Credentials
。
有没有办法通过HttpClient
提供身份验证信息?
我目前使用HttpWebRequest
获取网站。我想使用等待模式,但HttpWebRequests
不支持此模式。我找到了一个新的 Http worker 类 HttpClient
。我正在使用HttpClient.GetAsync(...)
查询我的网页。但是我缺少添加ClientCredentials
的选项,类似于HttpWebRequest.Credentials
。
有没有办法通过HttpClient
提供身份验证信息?
您可以将已包含凭据的 HttpClientHandler Class 实例与 HttpClient Constructor 一起传递:
using (var handler = new HttpClientHandler { Credentials = ... })
using (var client = new HttpClient(handler))
{
var result = await client.GetAsync(...);
}
不应该每次丢弃 HttpClient,而是在更长的时间内(应用程序生命周期)使用它(或一个小的客户端池)。您也不需要为它使用处理程序,而是可以更改默认标头。
创建客户端后,您可以设置其默认请求标头进行身份验证。以下是基本身份验证的示例:
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "username:password".ToBase64());
ToBase64()是一个帮助函数,用于将字符串转换为base64编码。
HttpClientHandler
设置UseDefaultCredentials = true
。 - Aleksei Poliakov