@WayMax

Как получить поток данных через http?

Есть сервис который по http отдает данные. Считываю данные таким образом:
WebClient client = new WebClient();
string s = client.DownloadString("http://213.125.32.5:83/axis-cgi/operator/param.cgi?action=list&group=Brand.ProdShortName");

В результате в s получаю Brand.ProdShortName=AXIS P3367.

Каким образом считать поток данных (постоянно обновляемый) по адресу
http://213.125.32.5:83/axis-cgi/motion/motiondata.cgi?group=0
?
В браузере это выглядит так:
--axismdb
Content-Type: text/plain
group=0;level=0;threshold=15;
--axismdb
Content-Type: text/plain
group=0;level=0;threshold=15;
--axismdb
Content-Type: text/plain
group=0;level=0;threshold=15;

... и т.д. бесконечное получение данных
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
Есть сервис который по http отдает данные. Считываю данные таким образом:

WebClient client = new WebClient();
string s = client.DownloadString("213.125.32.5:83/axis-cgi/operator/param.cgi?action...");

В результате в s получаю Brand.ProdShortName=AXIS P3367.

уточним, на момент ответа, в данном фрагменте кода, запрос именно такой
http://213.125.32.5:83/axis-cgi/operator/param.cgi?action=list&group=Brand.ProdShortName

так вот, в браузере это выглядит так же как и у вас
3yytnzc.png
запрос
http://213.125.32.5:83/axis-cgi/motion/motiondata.cgi?group=0
у меня в браузере выглядит несколько иначе (но может и тоже практически так же.. у вас какое то логгирование? у меня просто отображение страницы в FF)
UiZBSYy.png

как итог, думаю шарповские функции работают вполне корректно. просто вам надо быть внимательнее с запросами

ps если речь о том что данные по второму запросу постоянно обновляются, копните в сторону потоков - https://docs.microsoft.com/ru-ru/dotnet/api/system...

pps
набросок ))
using System;
using System.IO;
using System.Net;
using System.Text;

namespace WebStream
{
    static class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("let's begin..\n");
            var myWebClient = new WebClient();
            var myStream = myWebClient.OpenRead("http://213.125.32.5:83/axis-cgi/motion/motiondata.cgi?group=0");
            var sr = new StreamReader(myStream);
            while (!sr.EndOfStream)
            {
                var line = sr.ReadLine();
                // возможно эту проверку можно и убрать, это как вам удобнее
                if (!string.IsNullOrEmpty(line))
                    Console.WriteLine(line);
            }
            myStream.Close();
        }
    }
}
.. естественно совершенству нет предела. тут не учтена ни какая возможность выхода вообще. не рассмотрены варианты async (а они есть в природе). но как proof of concept пойдет )). уже гораздо лучше чем ничего ))

удачи!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы