Как получить 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 шт):
В вашем вопросе упомянуты три сущности: сервер (его роль исполняет HttpListener), браузер, HttpClient.
Только один из них - браузер - имеет UserAgent. В каждый браузер забита константа с его описанием. При выходе новой версии браузера это значение может меняться. Именно это значение браузер передаёт на сервер (веб-сайт). Сервер может использовать полученный UserAgent по своему усмотрению. Например, если его нет, то это скорее всего бот и можно не отвечать ему.
Две другие сущности: сервер и HttpClient - не имеют своих собственных UserAgent. Поэтому используя только их (а именно это вы и хотите сделать) неоткуда взять это значение.