Arduino Uno + Ethernet Shield W5100 Подключение к интернету и передача данных. Удаленный доступ.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

К сайту, к примеру, http://arduino.ru, подключение происходит, получаю текст страницы, а к своему локальному сайту подключиться не могу, получаю следующее сообщение:

Zagruzka
192.168.1.56connecting...
connected
HTTP/1.1 400 Bad Request
Date: Tue, 12 May 2020 18:10:32 GMT
Server: Apache
Vary: accept-language,accept-charset
Accept-Ranges: bytes
Connection: close
Content-Type: text/html; charset=utf-8
Content-Language: en

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Bad request!</title>
<link rev="made" href="mailto:%5bno%20address%20given%5d" />
<style type="text/css"><!--/*--><![CDATA[/*><!--*/ 
    body { color: #000000; background-color: #FFFFFF; }
    a:link { color: #0000CC; }
    p, address {margin-left: 3em;}
    span {font-size: smaller;}
/*]]>*/--></style>
</head>

<body>
<h1>Bad request!</h1>
<p>


    Your browser (or proxy) sent a request that
    this server could not understand.

</p>
<p>
If you think this is a server error, please contact
the <a href="mailto:%5bno%20address%20given%5d">webmaster</a>.

</p>

<h2>Error 400</h2>
<address>
  <a href="/">default</a><br />
  <span>Apache</span>
</address>
</body>
</html>


disconnecting.

В чём дело?

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017
  if (client.connect(server, 80)) {
    Serial.println("connected");  //  "соединение установлено"
    client.println("GET /index.php HTTP/1.1");
   client.println("Host: 192.168.1.33");
    client.println("Connection: close");
    client.println();
    client.println();
  } else {
    Serial.println("connection failed");  //  "подключение не удалось"
  }
}

 

Разобралась

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");  // "отключение."
    client.stop();
    for(;;)
      ;
  }
}

 

Для чего

    for(;;)
      ;
  }

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Я б выкинул цикл этот.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

andycat пишет:
Я б выкинул цикл этот.

Тогда в монитор порта будет сыпаться disconnecting. disconnecting. disconnecting.

Далее у меня опять загвоздка. Нужно распарсить полученный ответ, соответственно мне нужно получить ответ в переменную типа String (с ним мне работать просто).

if (client.available()) {
char inChar = (char)client.read();
inString += inChar;
if (inChar == '#') {
Serial.print(inString);
inString="";
}
}

 К примеру, я могу в конце своего ответа поставить символ #, тогла всё просто, но как то это извращенно, как мне кажется.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ставь символ перевода каретки «\n»

inspiritus
Offline
Зарегистрирован: 17.12.2012

А чем разделители и ограничители типа # Вам не нравятся. Посмотрите любую поисковую строку в интернет-магазине - сплошные разделители (%/=&). Делайте так, как Вам удобнее и быстрее и это будет самое эффективное.
 

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Большое спасибо.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

В визнете вы получаете из Client.read() весь payload. Т.е. весь HTTP пакет от GET до конца. Парсинг этого пэйлоада - задача не для слабонервных. Она, конечно, решена миллионы раз, но каждый программист это делал для себя и наврядли выкладывал в интернет.

Исходя из общего принципа - вам необходимо искать строку, следующую за GET и оканчивающуюся пробелом (в самом URI пробелы не встречаются). Затем бить на части по токенам `?` и `&` её. Human readable strings парсить, увы, не сахар.