C# HttpClient正在忽略请求URI的`www.`部分
我正在尝试使用C# HttpClient正在忽略请求URI的`www.`部分,c#,.net,httprequest,.net-4.5,dotnet-httpclient,C#,.net,Httprequest,.net 4.5,Dotnet Httpclient,我正在尝试使用HttpClient发送GET请求: public static HttpClient Client { get { var handler = new HttpClientHandler() { AutomaticDecompression = System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.GZip }; var http = new HttpClient(han
HttpClient
发送GET
请求:
public static HttpClient Client { get
{
var handler = new HttpClientHandler() { AutomaticDecompression = System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.GZip };
var http = new HttpClient(handler) { BaseAddress = new Uri("https://www.example.com/") };
http.DefaultRequestHeaders.Accept.Clear();
http.DefaultRequestHeaders.Accept.TryParseAdd("*/*");
http.DefaultRequestHeaders.AcceptLanguage.TryParseAdd("en-US;q=0.6,en;q=0.4");
http.DefaultRequestHeaders.AcceptEncoding.TryParseAdd("gzip, deflate, br");
http.DefaultRequestHeaders.Host = "example.com";
http.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
http.DefaultRequestHeaders.Add("Connection", "keep-alive");
http.DefaultRequestHeaders.Add("Keep-Alive", "600");
http.DefaultRequestHeaders.UserAgent.TryParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36");
ServicePointManager
.ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) => true;
return http;
}
...
using (var client = HttpHelper.Client)
using (var res = await client.GetAsync("api/stuff/filter?order=" + order + "&page=" + page))
if (res.IsSuccessStatusCode)
{
var json = await res.Content.ReadAsStringAsync();
var response = JsonConvert.DeserializeObject<AnimeResponse>(json);
return response;
}
publicstatichttpclient客户端{get
{
var handler=new-HttpClientHandler(){AutomaticDecompression=System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.GZip};
var http=new-HttpClient(handler){BaseAddress=new-Uri(“https://www.example.com/") };
http.DefaultRequestHeaders.Accept.Clear();
http.DefaultRequestHeaders.Accept.tryparsead(“*/*”);
http.DefaultRequestHeaders.AcceptLanguage.tryparsead(“en-US;q=0.6,en;q=0.4”);
http.DefaultRequestHeaders.AcceptEncoding.tryparsead(“gzip,deflate,br”);
http.DefaultRequestHeaders.Host=“example.com”;
Add(“X-request-With”,“XMLHttpRequest”);
Add(“连接”,“保持活动”);
Add(“Keep-Alive”,“600”);
http.DefaultRequestHeaders.UserAgent.tryparsead(“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/59.0.3071.115 Safari/537.36”);
服务点管理器
.ServerCertificateValidationCallback+=
(发件人、证书、链、sslPolicyErrors)=>真;
返回http;
}
...
使用(var client=HttpHelper.client)
使用(var res=await client.GetAsync(“api/stuff/filter?order=“+order+”&page=“+page))
如果(res.IsSuccessStatusCode)
{
var json=await res.Content.ReadAsStringAsync();
var response=JsonConvert.DeserializeObject(json);
返回响应;
}
不幸的是,这会在没有www.
部分的情况下发送一个请求,并导致301
状态代码以及许多许多失败的重定向到同一地址(没有www.
部分)
我怎样才能解决这个问题
编辑:当我使用Fiddler重新发送请求时,它也会返回301,但n会正确重定向到
wwww.
。HttpClient
不会,只会重定向到相同的无www URI。您试图从哪里请求数据-https://www.example.com/
?那么为什么要设置请求默认主机名tomasterani.me
,我想知道…?是什么让你相信它在没有www
的情况下发送请求?你在运行Fiddler吗?IE浏览器中的哪个站点被允许和阻止?你能使用IE访问站点吗?@jdweng是的,我能。如果你注释掉这一行http.DefaultRequestHeaders.Host=“example.com”,会发生什么;
?