Как получить User Agent через HttpClient?

Есть код который при запуске локальной страницы в браузере возвращает User-Agent браузера:

public static class UserAgentDetector
{
   private static int port;
   private static string useragent;

   static UserAgentDetector()
   {
      port = new Random().Next(13000, 14000);
   }

   public static string GetUserAgent()
   {
      try
      {
         StartServer(port);
         Process.Start($"http://localhost:{port}");
         long ticks = DateTime.Now.Ticks;
         while (useragent == null && new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds < 60.0)
         {
            Thread.Sleep(100);
         }
      }
      catch { }
     return useragent;
    }

    private static void StartServer(int port)
    {
       HttpListener httpListener = new HttpListener();
       httpListener.Prefixes.Add($"http://localhost:{port}/");
       httpListener.Start();
       new Thread(Listen).Start(httpListener);
    }

    private static void Listen(object listenerObj)
    {
       HttpListener obj = listenerObj as HttpListener;
       HttpListenerContext context = obj.GetContext();
       useragent = context.Request.Headers["User-Agent"];
       HttpListenerResponse response = context.Response;
       response.Redirect("https://google.com/");
       response.Close();
       obj.Stop();
    }
}

Хочу сделать в HttpClient'e, но не знаю как.
И можно ли получить User-Agent без открытия браузера?


Ответы (1 шт):

Автор решения: Alexander Petrov

В вашем вопросе упомянуты три сущности: сервер (его роль исполняет HttpListener), браузер, HttpClient.

Только один из них - браузер - имеет UserAgent. В каждый браузер забита константа с его описанием. При выходе новой версии браузера это значение может меняться. Именно это значение браузер передаёт на сервер (веб-сайт). Сервер может использовать полученный UserAgent по своему усмотрению. Например, если его нет, то это скорее всего бот и можно не отвечать ему.

Две другие сущности: сервер и HttpClient - не имеют своих собственных UserAgent. Поэтому используя только их (а именно это вы и хотите сделать) неоткуда взять это значение.

→ Ссылка