0

Как узнать ping ( время отклика ) для любого URL , class Ping не подходит так как время отклика покажет для ****.com к примеру, а вот для ****.com/about уже не будет показывать

hekeemje
  • 352
  • 1
    Пинг до сервера одинаковый, что для /, что для /about, так как это один и тот же сервер. А вот время обработки запроса может быть разным, плюс время передачи данных. Что именно вам требуется? – aepot Feb 05 '22 at 23:44
  • @aepot сколько время обработки запроса ? – hekeemje Feb 05 '22 at 23:49
  • 1
    Запускаете секундомер перед отправкой запроса, останавливаете при полном получении ответа. Не вижу проблемы. – aepot Feb 06 '22 at 00:06
  • @aepot HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Так же пробовал не хочет для ссылок по типу /about – hekeemje Feb 06 '22 at 00:10
  • HttpWebRequest засуньте это ископаемое времен динозавров туда, где взяли. У вас есть HttpClient и мой прошлый ответ с ним. – aepot Feb 06 '22 at 00:12

1 Answers1

3
class GetAsyncUrl
    {
        private readonly HttpClient _client;

        public GetAsyncUrl()
        {
        _client = new HttpClient();
        _client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36");
        }

        public async Task showAsyncTime(string url)
        {
            var sw = new Stopwatch();
            sw.Restart();
            await _client.GetStringAsync(url);
            sw.Stop();

            Console.WriteLine(sw.ElapsedMilliseconds);
        }

    }
hekeemje
  • 352
  • 3
    Зачем HttpRequestMessage? В данном случае он бесполезен, достаточно простого .GetAsync(...);. Также я надеюсь, HttpClient вы не каждый раз создаете? Помните, он должен быть один, на все приложение! – EvgeniyZ Feb 06 '22 at 01:02
  • @EvgeniyZ подправил код – hekeemje Feb 06 '22 at 02:40
  • Вот это хороший код, но я бы для надежности вычитывал контент, типа .GetStringAsync(url) вместо GetAsync. – aepot Feb 06 '22 at 08:09
  • Если этот метод надо вызывать несколько раз, то лучше sw.Restart(); вместо sw.Start(); – aepot Feb 06 '22 at 08:34
  • @aepot исправил – hekeemje Feb 06 '22 at 11:36
  • @aepot я видел вы отправляли правильное использование метода ? не могли бы показать ? а то вот пытаюсь его использовать с коллекцией ссылок url в foreach и что то проблемы возникают, хотя при одиночном отлично работает – hekeemje Feb 06 '22 at 11:38
  • @aepot ещё проблема оказалась в том что забыл указать "_client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36");" весь день ломал голову что не так, оказалось вот в чём была)) – hekeemje Feb 06 '22 at 14:15
  • @hekeemje кстати эту строчку вы можете в любой момент вытащить из своего браузера, откройте инструменты разработчика, вкладака Сеть, обновите страницу и посмотрите в любой запрос, там будет эта строчка в заголовках запроса. – aepot Feb 06 '22 at 14:19
  • @aepot вижу да, какой материал стоить почитать чтобы понять лучше всё это ? – hekeemje Feb 06 '22 at 14:36
  • Основы TCP/IP и HTTP. – aepot Feb 06 '22 at 14:46
  • @aepot у меня есть куча URL и мне надо их загнать в этот метод , для~100 URL довольно таки не быстро получу результат , хотел использовать lock чтобы обработать все URL быстро , но понял что lock нельзя использовать с await, есть ли какое то решение этого чтобы быстро обработать все URL этим методом ? – hekeemje Feb 06 '22 at 15:35
  • Я уже раз 5 вам эту ссылку кидал. – aepot Feb 06 '22 at 15:39