HTTPWebRequest未添加接受标头

我正在尝试解析网页,并且请求中的要求之一是设置适当的accept Header。我已经证实,如果没有通过Postman进行设置,它将无法正常工作。因此,我尝试通过HttpWebRequest在GET请求中设置“接受标头”,但根据我在Fiddler中的发现,它没有发送过来。

这是我通过邮递员发送时的请求。可以了请注意accept标头。

提琴手的工作要求

HTTPWebRequest未添加接受标头

这是我通过代码发送时的请求。这是行不通的。请参阅下面的代码,了解我的请求。

提琴手请求

HTTPWebRequest未添加接受标头

这是我的代码:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
req.KeepAlive = true;
req.accept = @"*text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
//req.Headers.Add("accept",@"*text/html,*/*;q=0.8");
//req.Headers["accept"] = @*text/html,*/*;q=0.8";

using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()))
{
    source = reader.ReadToEnd();
}

我已经尝试过req.Recept下方的两行,上面也注释掉了,但是没有运气。任何建议表示赞赏。只要能正常工作,我也不介意将HttpWebRequest更改为其他内容。

iCMS 回答:HTTPWebRequest未添加接受标头

我对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

大家都在问