Проблема отправки 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.
// send data String url = espServerLogPath; url += inStr; url = "GET " + url + " HTTP/1.1\r\n" + "Host: " + espServerLogIP + "\r\n" + "User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5\r\n" + "Accept: text/html\r\n" + "Connection: Keep-Alive\r\n\r\n"; clientLog.println(url);А почему 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).
Извените, не увидел. Спасибо