【问题标题】:Trying to read web page with HttpClient尝试使用 HttpClient 读取网页
【发布时间】:2020-09-16 18:44:04
【问题描述】:

我尝试使用 HttpClient (C#) 读取一些网页,但在某些页面上我得到 响应状态代码不表示成功:404(没有此类文件)?其他工作就好了。

这是代码示例:

            static readonly HttpClient client = new HttpClient();
    private static async void GetHtmlAsync()
    {
        var url = "https://www.yourwebpage.com";

        try
        {
            HttpResponseMessage response = await client.GetAsync(url);
            response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();

            Console.WriteLine(responseBody);
        }
        catch (HttpRequestException e)
        {
            Console.WriteLine("\nException Caught!");
            Console.WriteLine("Message :{0} ", e.Message);
        }
    }

也尝试将Header添加到客户端,但没有成功:

            client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0");
            client.DefaultRequestHeaders.Add("Accept", text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");
            client.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.5");
            client.DefaultRequestHeaders.Add("Connection", "keep-alive");
            client.DefaultRequestHeaders.Add("Host", "www.betexplorer.com");
            client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");

解决方案:

我使用 RestSharp 库解决了这个问题。

【问题讨论】:

  • 发布您的代码。
  • 在您请求的页面上查看您的代码和 hqve 或 detqils 会很有帮助。
  • 这通常意味着您使用的 URL 错误。仅此而已。你想让我们说什么?我们不知道您尝试了哪些 URL,或者您如何在代码中使用它们,因此我们无法指出任何错误
  • 顺便说一句,写一个声明,然后在最后加上一个问号(就像你在这里所做的那样)不会神奇地将它变成一个真正的问题。你所做的只是告诉我们你的烦恼。您没有提出任何问题或提供任何我们可以用来帮助您的信息。

标签: c# web-scraping httpclient


【解决方案1】:

这里是解决方案。 我使用了 RestSharp 库,它运行良好。

  private static async void GetHtmlAsync()
    {
        var url = "https://www.yourwebpage.com";

        try
        {
            var restClient = new RestClient(url);
            var request = new RestRequest("", Method.GET);

            restClient.ExecuteAsync(request, response =>
            {
                Console.WriteLine(response.Content);
            });

        }
        catch (HttpRequestException e)
        {
            Console.WriteLine("\nException Caught!");
            Console.WriteLine("Message :{0} ", e.Message);
        }
    }

【讨论】:

    【解决方案2】:

    你必须伪装成浏览器。
    例如,添加以下标题

    client.DefaultRequestHeaders.Add("User-Agent",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0");
    

    【讨论】:

    • 不,这没有任何区别。
    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多