Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

Get-запрос. Ошибка "Сервер нарушил протокол. Section=ResponseStatusLine

#c_sharp #get


Доброе время суток!
При вызове Get метода, catch(Exception ex) выводит ошибку "Сервер нарушил протокол.
Section=ResponseStatusLine.

код на клиенте Метод get-запроса:

  public String URL = "http://192.168.16.254:8080/blinkSs";
    string r = "";
    private string GET(string sUrl, string Data)
    {

        System.Net.WebRequest req = System.Net.WebRequest.Create(sUrl + "?" + Data);
        System.Net.WebResponse resp = req.GetResponse();
        System.IO.Stream stream = resp.GetResponseStream();
        System.IO.StreamReader sr = new System.IO.StreamReader(stream);
        string Out = sr.ReadToEnd();
        sr.Close();
        return Out;

    }


Вызываю метод GET вот так:

if (e.KeyCode == Keys.Up)
            {
                try
                {
                    r = "oske";
                    String a=GET(URL, r);
                    MessageBox.Show(a);
                }
                catch(Exception ex) {
                    MessageBox.Show("error" + " " + ex.Message);
                }
            }


код на сервере:

void setup() {     
  Serial.begin(115200);  
  pinMode(13, OUTPUT); //Rele 1
  //pinMode(12, OUTPUT);  //Rele 2
}
int f = 0;
String com_get = "";//
void loop() {
  boolean has_request = false;
  String in = "";
  if (Serial.available()) {
    in = "";
    while (true) {  // should add time out here
      while (Serial.available() == false) {}
      in += (char)(Serial.read());//тут хттп запрос, урл адресс
      if (in.endsWith("\r\n\r\n")) {//если первая строка (string) завершается символом,
содержащимся в строке string2
        has_request = true;  break;
      }
    }   
  }
  if (has_request) {
    int i1 = in.indexOf("GET /blinkSs?"), i2;//13 символов
    if (i1 != -1) {
      i2 = in.indexOf(" ", i1+13);//кол. символов с 13ого
      f = in.substring(i1+13, i2).toInt();//запрос
      com_get=in.substring(i1+13, i2);
    }      


    //Serial.println("HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: close");
     //String sr = "";
     //Serial.println(sr);
    // Serial.println("");
     //Serial.println("");
     //Serial.println("");
     //Serial.println("");
    if (com_get=="oske") {f=1; Serial.println("Comando 1. oske"); } //↑
    if (com_get=="aska") {f=2; Serial.println("Comando 2. aska"); }//↓
    if (com_get=="kren_unga") {f=3; Serial.println("Comando 3. kren_unga"); }// /
    if (com_get=="kren_sulga") {f=1; Serial.println("Comando 1. kren_sulga"); }// \

   //Serial.println("");
   //Serial.println("\n");
    has_request = false;
  }
switch (f){
  case 1:
   digitalWrite(13, HIGH);
   break;
  case 2:
   digitalWrite(13, LOW);
   break;  
   f=0;
   Serial.end();

}  

}

    


Ответы

Ответ 1



В файл app.config добавьте Задание этого свойства игнорирует ошибки проверки, возникающие при анализе HTTP.

Ответ 2



Очевидно же, что ты на сервере код состояния Status-Line не отправляешь. Изучи RFC https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html Response = Status-Line ; Section 6.1 *(( general-header ; Section 4.5 | response-header ; Section 6.2 | entity-header ) CRLF) ; Section 7.1 CRLF [ message-body ] ; Section 7.

Комментариев нет:

Отправить комментарий