Попытка прочитать веб-страницу с помощью HttpClient

#c# #web-scraping #httpclient

#c# #очистка веб-страниц #httpclient

Вопрос:

Я пытаюсь прочитать некоторые веб-страницы с помощью 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);
        }
    }
  

также попробуйте добавить заголовок к клиенту, но безуспешно:

             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.

Комментарии:

1. опубликуйте свой код.

2. Было бы полезно просмотреть ваш код и hqve, а также детали на страницах, которые вы запрашиваете.

3. Обычно это означает, что используемый вами URL-адрес неверен. Не намного больше, чем это. Что вы хотите, чтобы мы сказали? Мы понятия не имеем, какие URL-адреса вы пробовали или как вы использовали их в коде, поэтому мы не можем указать на какие-либо ошибки

4. Кстати, написание заявления, а затем постановка вопросительного знака в конце (как вы сделали здесь) волшебным образом не превращает его в реальный вопрос. Все, что вы сделали, это рассказали нам о своих проблемах. Вы ничего не спросили и не предоставили никакой информации, которую мы могли бы использовать, чтобы помочь вам.

Ответ №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");
  

Комментарии:

1. Нет, это не имеет никакого значения.