Официальный сайт компании Arduino по адресу arduino.cc
Проблема отправки get запроса
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 18/02/2019 - 08:23
Приветствую.
Есть проблема отправки get запроса.
Вот скетч.
#include<SoftwareSerial.h> // rdm6300 #include <RDM6300.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> const char* ssid = "OneProjectWifi";// const char* password = "Oneprojectwifi"; //WiFiClient client; char server[] = "192.168.10.155"; //eg: 192.168.0.222 #define No_Of_Card 3 unsigned long reconnect = 0; char var[8]; String inputString = ""; boolean stringComplete = false; String buff = ""; String url = ""; WiFiClient client; //WiFiServer server(80); SoftwareSerial RFID (4, 0); uint8_t Payload[6]; RDM6300 RDM6300(Payload); byte id[No_Of_Card][5]={ {44,153,22,219,22}, //RFID NO-1 {112,224,72,84, 24}, //RFID NO-2 {151,94,80,84,43} //RFID NO-3 }; byte id_temp[3][3]; byte i; int j=0; int Led = 2; void setup () { Serial.begin(9600); delay(10); RFID.begin(9600); pinMode(Led, OUTPUT); inputString.reserve(200); url.reserve(300); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server // server.begin(); Serial.println("Server started"); Serial.print(WiFi.localIP()); delay(1000); Serial.println("connecting..."); } void loop () { //if (RFID.available()) { while (RFID.available() > 0) { digitalWrite(Led, HIGH); uint8_t c = RFID.read(); if (RDM6300.decode(c)) { Serial.print("NEW CARD:"); boolean perm = 1; for (int i=0; i < 6; i++){ Serial.print(Payload[i], HEX); Serial.print(" "); //id_temp[0][i] = Payload[i]; } Serial.println(); String req = String(Payload[0], HEX) + String(Payload[1], HEX) + String(Payload[2], HEX) + String(Payload[3], HEX) + String(Payload[4], HEX) + String(Payload[5], HEX); Sending_To_DB(req); /* Serial.print("CHECK CARD:"); int j = 0; for (j = 0; j < No_Of_Card; j++) { for (int i = 0; i < 5; i++) { if (id_temp[0][i] == id[j][i]) { perm = 1; } else { perm = 0; } if (!perm) break; } } Serial.println();*/ } } digitalWrite(Led, LOW); } void Sending_To_DB (String ss) { //CONNECTING WITH MYSQL if (client.connect(server, 80)) { Serial.println("connected"); // Make a HTTP request: Serial.println("GET /rfid_read.php?allow=1&id="); //YOUR URL /rfid/rfid_read.php?allow client.print("GET /rfid_read.php?allow=1&id="); //YOUR URL /rfid/rfid_read.php?allow /var/www/html/rfid/rfid_read.php client.print(ss); client.print(" "); //SPACE BEFORE HTTP/1.1 client.print("HTTP/1.1"); client.print(" "); client.print("Host: "); client.println(server); //client.println("Host: 192.168.10.155");//eg: 192.168.0.222 client.println("Connection: close"); client.println(); } else { Serial.println("connection failed"); } client.stop(); } void rfid_read () { if (RFID.available()) { while (RFID.available() > 0) { digitalWrite(Led, HIGH); uint8_t c = RFID.read(); Serial.print(c,HEX); if (RDM6300.decode(c)) { for (int i=0; i < 5; i++){ Serial.print(Payload[i], HEX); Serial.print(" "); id_temp[0][i] = Payload[i]; } Serial.println(); } } digitalWrite(Led, LOW); delay(100); } else { return; } }
Запрос такой GET /rfid_read.php?allow=1&id=550b960911d HTTP/1.1
Когда делаю посылаю запрос через Браузер то получаю правильный ответ. т.е. в базу заносится данные
"GET /rfid_read.php?allow=1&id=550b960911d HTTP/1.1" 200 1 "-"
А через Arduino получаю вот так "GET /rfid_read.php?allow=1&id=550b960911d HTTP/1.1" 400 950 "
В чем ошибка? помогите пожалуйста
Неправильно строите http запрос, у вас на одной строке (на первой) запроса указан метод урло протокол и первый заголовок «Host:».
После протокола вместо пробела должен быть «возврат каретки» + «перевод строки»
П.С.
Много раз встречаю удивительный код.
Для передачи каких либо данных с iot устройств на http сервер, почемуто используется не POST запрос а GET и данные передаются в урле.
Загадка вообщем.
Гипотеза: отлаживать проще. А потом уже нафиг надо переделывать то, что работает.
А почему POST-то? Тогда уж, идеологически правильнее использовать PUT.
А почему POST-то? Тогда уж, идеологически правильнее использовать PUT.
PUT - замени данные файла или ресурса по заданному uri
В общем имеет место словоблудие, то и другое сообщает серверу об изменении каких либо данных, в отличии от GET запроса, в котором мы запрашиваем что либо в зависимости от изменившихся данных на стороне клиента.
в отличии от GET запроса, в котором мы запрашиваем что либо в зависимости от изменившихся данных на стороне клиента.
ничего не мешает в ответ на GET запрос тупо ничего не возвращать клиенту.
в отличии от GET запроса, в котором мы запрашиваем что либо в зависимости от изменившихся данных на стороне клиента.
ничего не мешает в ответ на GET запрос тупо ничего не возвращать клиенту.
Типа наш сервер, что хотим то и делаем.
А когда клинтом для отладки будет броузер, будем удивляться что get запросы не долетают до сервера, а возвращаются кэшированные ответы.
Мы же сознательно не используем post запрос для которого:
Responses to this method are not cacheable, unless the response includes appropriate Cache-Control or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent to retrieve cacheable resource.
Неправильно строите http запрос, у вас на одной строке (на первой) запроса указан метод урло протокол и первый заголовок «Host:».
После протокола вместо пробела должен быть «возврат каретки» + «перевод строки»
П.С.
Много раз встречаю удивительный код.
Для передачи каких либо данных с iot устройств на http сервер, почемуто используется не POST запрос а GET и данные передаются в урле.
Загадка вообщем.
Подскажите как нужно, пожалуйста
Вам же привели пример запроса, только юзер агент не обязательно мозила, кип-элайф в коннекшен тоже лишний, зачем обманывать сервер (можете не добавлять этот заголовок или укажите честно Connection: close).
Вам же привели пример запроса, только юзер агент не обязательно мозила, кип-элайф в коннекшен тоже лишний, зачем обманывать сервер (можете не добавлять этот заголовок или укажите честно Connection: close).
Извените, не увидел. Спасибо