none
нестандартный ответ устройства на webRequest.GetResponse() RRS feed

  • Вопрос

  • Добрый день. Имеется устройство (wifi флэшка). Управление её функциями осуществляется через HTTP запросы. К примеру переключение в режим WIFI осуществляется "http://10.168.168.1:8080/goform/Setcardworkmode?workmode=0"

    При этом, если запустить данный адрес в броузере возвращается ответ вида {mode 0}. Функция webRequest.GetResponse() не принимает данный ответ и возвращает исключение типа "Ошибка протокола сервера". В принципе, для управления функциями устройства ответ и не нужен, можно бы поставить заглушку. Но хотелось бы как то получать ответ от флэшки, чтобы в программе отображать её текущее состояние.

    12 апреля 2016 г. 14:19

Ответы

Все ответы

  • Добрый день,

    установите Fiddler и сравните запросы/ответы, включая header, в обоих случаях, думаю найдете ответ.

    При программной проверке установите у WebRequest значение proxy в локальный прокси Fiddler'а.

    13 апреля 2016 г. 6:24
  • Изначально анализировал трафик обмена при помощи WireShark.

    При посылке такого запроса:

    Hypertext Transfer Protocol
        POST /goform/Getwifikey HTTP/1.1\r\n
        Content-Type: text/html\r\n
        Content-Length: 12\r\n
        Host: 10.168.168.1:8080\r\n
        Connection: Keep-Alive\r\n
        User-Agent: android-async-http/1.4.5 (http://loopj.com/android-async-http)\r\n
        Accept-Encoding: gzip\r\n
        \r\n
        [Full request URI: http://10.168.168.1:8080/goform/Getwifikey]
        [HTTP request 1/1]
        [Response in frame: 744]
    Line-based text data: text/html
        userkey=zsun

    Получаю такой ответ:

    Hypertext Transfer Protocol
        HTTP/1.0 200 OK\n
        Server: GoAhead-Webs/2.5.0\r\n
        Pragma: no-cache\n
        Cache-control: no-cache\n
        Content-Type: text/html\n
        \n
        [HTTP response 1/1]
        [Time since request: 0.042913000 seconds]
        [Request in frame: 741]
    Line-based text data: text/html
        {"status":0,"wifikey":"123123","secmode":"WPA"}\n

    И этот ответ {"status":0,"wifikey":"123123","secmode":"WPA"}\n приводит к исключению в строке

    WebResponse myWebResponse = myWebRequest.GetResponse(); поскольку видимо не соответствует нормам протокола.

    Что можно сделать, чтобы получить ответную строку  в программу? Пытался выдернуть её из содержимого исключения, но там её нет, либо я не знаю способа. Другие виды запросов работают через GET но ответ такого же типа.





    • Изменено DVStolovnik 21 апреля 2016 г. 7:16
    21 апреля 2016 г. 7:13
  • Разобрался сам.

    Тут более подходит класс HttpClient. Тупо грузит строку из адреса, что и требовалось.

                HttpClient Klient = new HttpClient();
                string KMessage=await Klient.GetStringAsync("http://10.168.168.1:8080/goform/Getwifikey");