我对HttpWebRequest
API并不熟悉,因为在它被HttpClient
取代后,我开始学习C#。
猜测您在Accept
字符串中存在语法错误:
req.Accept = @"*text/html...
^ this "*" is not needed
根据HttpWebRequest
文档:
我们不建议您将HttpWebRequest
用于新开发。而是使用System.Net.Http.HttpClient
类。
下面是基于.NET Framework 4.7.2控制台应用程序的示例,用于测试:
public class Program
{
private static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
// As alternative way you can setup DefaultRequestHeaders
// client.DefaultRequestHeaders.Add("Accept","text/html,application/xhtml+xml,application/xml; q=0.9,image/webp,*/*; q=0.8");
try
{
string result = await GetHttpResponseWithAcceptAsync("https://example.org");
Console.WriteLine(result);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
private static async Task<string> GetHttpResponseWithAcceptAsync(string url)
{
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get,url))
{
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xhtml+xml"));
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml",0.9));
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("image/webp"));
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*",0.8));
using (HttpResponseMessage response = await client.SendAsync(request,HttpCompletionOption.ResponseHeadersRead))
{
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
}
}
Wireshark
GET / HTTP/1.1
Accept: text/html,*/*; q=0.8
Host: ***censored***
Connection: Keep-Alive
有关扩展日志记录,请参考this answer。
本文链接:https://www.f2er.com/1910354.html