ответ restsharp ничего не содержит

#c# #restsharp

#c# #острая резкость

Вопрос:

Я пытаюсь сделать простой запрос, чтобы получить HTML-код веб-сайта, но restsharp не возвращает никакого ответа в response.Content :

 using System;
using RestSharp;

namespace AMD
{
    class Program
    {
        static void Main(string[] args)
        {
            string response2;
            
            var client = new RestClient("https://google.com");
            var request = new RestRequest("Method.GET");
            
            request.AddHeader("Host:", "google.com");
            request.AddHeader("User-Agent:", "Mozilla/5.0 (Windows NT 10.0; Win64; x64;");
            request.AddHeader("Accept:", "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            request.AddHeader("Accept-Language:", "en-US,en;q=0.5");
            request.AddHeader("Accept-Encoding:", "gzip, deflate, br");
            request.AddHeader("Connection:", "keep-alive");
            request.AddHeader("Cache-Control:", "max-age=0");

            IRestResponse response = client.Execute(request);
            
            response2 = response.Content.ToString();
            
            Console.WriteLine(response2);     // doesn't print anything
            
            Console.ReadLine();               // so console doesn't close
        }
    }
}
 

Ответ №1:

Две вещи:

  • при создании IRestREquest — вам нужно передать значение enum, А НЕ строку:
     var request = new RestRequest(Method.GET);
     

    Строка будет интерпретироваться как ресурс для извлечения — и неудивительно, что извлекать нечего https://google.com/Method.GET ….

  • все ваши HTTP-заголовки не должны содержать завершающего :
     request.AddHeader("Accept-Encoding", "gzip, deflate, br");
                                    **** absolutely NO colon here! 
     

Итак, попробуйте этот код:

  static void Main(string[] args)
 {
     string response2;

     var client = new RestClient("https://google.com");
     var request = new RestRequest(Method.GET);

     request.AddHeader("Host", "google.com");
     request.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64;");
     request.AddHeader("Accept", "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
     request.AddHeader("Accept-Language", "en-US,en;q=0.5");
     request.AddHeader("Accept-Encoding", "gzip, deflate, br");
     request.AddHeader("Connection", "keep-alive");
     request.AddHeader("Cache-Control", "max-age=0");

     IRestResponse response = client.Execute(request);

     response2 = response.Content.ToString();

     Console.WriteLine(response2);     // doesn't print anything

     Console.ReadLine();
 }
 

Предложение: после того, как вы выполнили вызов и получили ответ, проверьте, прошел ли он успешно. Поскольку, если он не был успешным (по какой-либо причине), нет смысла пытаться десериализовать или работать с ответом в любом случае…..

 IRestResponse response = client.Execute(request);

if (response.IsSuccessful)
{
    // do your stuff here
}