HttpClient 访问 url 使用 '@'(at 符号)
HttpClient access url with '@' (at symbol)
当我向 URL 发出 GET 请求时,我正在集成一个 returns 密钥的服务,格式如下:
https://username:password@service.com/refresh.key
当我在浏览器中访问 URL 时,它 returns 是预期的新密钥,当我使用 HttpClient
执行 GET 请求时,我得到了 401。
HttpClient _client = new HttpClient();
var response = await _client.GetAsync(@"https://username:password@service.com/refresh.key"); // Returns a 401
我认为它与URL中的'@'
有关,但我不确定如何修复它,我尝试将其替换为'%40'
,但是当我这样做时,我得到一个 UriFormatException
.
有人知道怎么做吗?
您无需在 url 中提供凭据。相反,您可以这样做:
using (var handler = new HttpClientHandler {Credentials = new NetworkCredential("username", "password")}) {
using (HttpClient _client = new HttpClient(handler)) {
var response = await _client.GetAsync(@"https://service.com/refresh.key");
}
}
你应该修改HttpClient的Authorization header,你可以试试下面的代码;
HttpClient _client = new HttpClient();
byte[] usernamePasswordBytes = Encoding.ASCII.GetBytes("user:pass");
_client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(usernamePasswordBytes));
var response = await _client.GetAsync(@"https://service.com/refresh.key");
PS: 这样的 username:pass@domain.com 请求是 BasicAuthentication 请求所以实际上你尝试进行基本身份验证请求。
希望这对你有用
当我向 URL 发出 GET 请求时,我正在集成一个 returns 密钥的服务,格式如下:
https://username:password@service.com/refresh.key
当我在浏览器中访问 URL 时,它 returns 是预期的新密钥,当我使用 HttpClient
执行 GET 请求时,我得到了 401。
HttpClient _client = new HttpClient();
var response = await _client.GetAsync(@"https://username:password@service.com/refresh.key"); // Returns a 401
我认为它与URL中的'@'
有关,但我不确定如何修复它,我尝试将其替换为'%40'
,但是当我这样做时,我得到一个 UriFormatException
.
有人知道怎么做吗?
您无需在 url 中提供凭据。相反,您可以这样做:
using (var handler = new HttpClientHandler {Credentials = new NetworkCredential("username", "password")}) {
using (HttpClient _client = new HttpClient(handler)) {
var response = await _client.GetAsync(@"https://service.com/refresh.key");
}
}
你应该修改HttpClient的Authorization header,你可以试试下面的代码;
HttpClient _client = new HttpClient();
byte[] usernamePasswordBytes = Encoding.ASCII.GetBytes("user:pass");
_client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(usernamePasswordBytes));
var response = await _client.GetAsync(@"https://service.com/refresh.key");
PS: 这样的 username:pass@domain.com 请求是 BasicAuthentication 请求所以实际上你尝试进行基本身份验证请求。
希望这对你有用