Заголовки HTTP GET POST для Arduino + SIM808

Я пытаюсь заставить SIM808 работать с Arduino. Может GET и POST HTTP-запрос GPRS, но только то, что пришло на его тело со стороны сервера {"error":true,"message":"Unauthorized"} но мне нужен заголовок, так как он приносит cookie для сеанса.

+CREG: 0,1

AT+SAPBR=3,1,"Contype","GPRS"

OK

AT+SAPBR=3,1,"APN","giffgaff.com"

OK

AT+SAPBR=3,1,"USER","giffgaff"

OK

AT+SAPBR=3,1,"PWD",""

OK

AT+SAPBR=1,1

AT+SAPBR=2,1

+SAPBR: 1,1,"xx.xxx.xxx.xxx"

OK
AT+HTTPINIT

OK
AT+HTTPPARA="CID",1

OK
AT+HTTPPARA="URL","http://www.xxx.co.uk/index.php"

OK
AT+HTTPPARA="UA","MH Tracker"

OK
AT+HTTPPARA="CONTENT","Content-Length: 42"

OK
AT+HTTPPARA="CONTENT","Content-Type: application/x-www-form-urlencoded"

OK
AT+HTTPSSL=0

OK
AT+HTTPDATA=41,30000

pass=xxxx&user=xxxx&action=xxxx

OK

AT+HTTPACTION=1

OK

+HTTPACTION: 1,401,39

AT+HTTPREAD

+HTTPREAD: 39

{"error":true,"message":"Unauthorized"}

OK

AT+HTTPTERM

Я получил некоторые результаты, но с ошибкой, похоже, мой код содержит ненужные символы

любой совет

ПОСТ/клиент/index.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Хост: www.mhprojects.co.uk
Длина контента: 41

пароль=xxx6&пользователь=xxx&action=xxx

ОТПРАВИТЬ ОК
HTTP/1.1 400 Неверный запрос
Дата: Чт, 01 февраля 2018 г., 00:38:56 по Гринвичу
Сервер: Апач
Длина контента: 357
Подключение: закрыть
Тип содержимого: текст/html; кодировка = iso-8859-1



ошибка 400, неверный запрос

Неверный запрос

Ваш браузер отправил запрос, который этот сервер не смог понять.

Кроме того, внутренняя ошибка сервера 500 произошла ошибка при попытке использовать ErrorDocument для обработки запроса.

Код Arduino

char data[350]="POST /client/index.php HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nHost: www.mhprojects.co.uk\r\nContent- Длина: 41\r\n\r\npass=xxx&user=xxx&action=xxx";
int PowerOn = 12;//Питание на контакте
int Reset = 11;//Сброс вывода
символ aux_str[50];
///////////////
недействительная установка () {

pinMode (PowerOn, ВЫХОД);
pinMode (Сброс, ВЫВОД);
Serial.begin(9600);//скорость передачи UART

включить();

Serial.println(F("Включение питания"));
Серийный.println();
Serial.println(F("Подключение к сети..."));

while(send_command("AT+CREG?", "+CREG: 0,1", 1000)== 0 );

}

/////////////
недействительный цикл () {

символьный буфер[200];

if (send_command("AT+CIPMUX=0", "OK", 2000) == 1)// Выбирает режим одиночного соединения
{
if (send_command("AT+CSTT=\"giffgaff.com\",\"giffgaff\",\"\"", "OK", 2000) == 1)// Устанавливает APN, имя пользователя и пароль
{
if (send_command("AT+CIICR", "OK", 10000) == 1)// Устанавливает беспроводное соединение
{
if (send_command("AT+CIFSR", ".", 3000) == 1)// Получает локальный IP-адрес
{
if (send_command("AT+CIPSTART=\"TCP\",\"www.mhprojects.co.uk\",\"80\"","CONNECT OK", 10000) == 1)// Открывает TCP разъем
{
sprintf(aux_str,"AT+CIPSEND=%d", strlen(данные));
если (send_command(aux_str, ">", 1000) == 1) {

send_command(данные, "ОТПРАВИТЬ ОК", 1000);

пока (правда) {

read_UART_buffer (буфер, sizeof (буфер), 0);

}
Serial.println(буфер);
}
}
еще
{
Serial.println(F("Ошибка установки TCP-соединения\r\n\r\n"));
}
}
еще
{
Serial.println(F("Ошибка получения IP-адреса\r\n\r\n"));
}
}
еще
{
Serial.println(F("Ошибка подключения к беспроводной сети\r\n\r\n"));
}
}
еще
{
Serial.print(F("Ошибка установки APN\r\n\r\n"));
}
}
еще
{
Serial.print(F("Ошибка установки одиночного соединения\r\n\r\n"));
}

send_command("AT+CIPCLOSE", "CLOSE OK", 1000);

send_command("AT+CIPSHUT", "SHUT OK", 1000);

}

////////////////
недействительным power_on () {

// импульс включения
цифровая запись (PowerOn, LOW);
delay(500);
цифровая запись (PowerOn, ВЫСОКИЙ);
delay(3000);
цифровая запись (PowerOn, LOW);
delay(3000);
}

///////////////
недействительный сброс () {
digitalWrite (Сброс, НИЗКИЙ);
delay(500);
digitalWrite (Сброс, ВЫСОКИЙ);
delay(3000);
цифровая запись (PowerOn, LOW);
delay(500);
}

////////////////////////////////////////////////// //////////////////////////////////
int8_t send_command (char * AT-команда, char * ожидаемый_ответ, тайм-аут без знака int) {

uint8_t х = 0, ответ = 0;
символьный ответ[50];
беззнаковый длинный предыдущий;

memset(ответ, '\0', 50); // Инициализировать строку

delay(100);

в то время как ( Serial.available() > 0) Serial.read(); // Очистить входной буфер

Серийный.println();
Серийный.println();
Serial.println (AT-команда); // Отправляем AT-команду


х = 0;
предыдущий = millis();

// этот цикл ждет ответа
делать {
if (Serial. available() != 0) { // если во входном буфере UART есть данные, считывает их и проверяет ответ
ответ[x] = Serial.read();
Serial.print (ответ [x]);
х++;
if (strstr(response, expect_answer) != NULL) // проверяем, есть ли нужный ответ (ОК) в ответе модуля
{
ответ = 1;
}
}
}

while ((answer == 0) && ((millis() - предыдущая) 0) Serial.read(); // Очистить входной буфер
}

////////////////////////////////////////////////// //////////
void read_UART_buffer (char *buffer, int count, unsigned int timeOut) {
интервал я = 0;
беззнаковый длинный timerStart;
timerStart = millis();

в то время как (1) {
в то время как (Серийный.доступный()!=0){
Serial.write(Serial.read());
char c = Serial.read();
буфер[i++] = с;

}
//буфер[i]='\0';
if((unsigned long) (millis() - timerStart) > timeOut * 1000UL) {
перерыв;
}
}
}

, 👍-1


1 ответ


1

Вы уверены, что длина контента равна 41? Не похоже, убедитесь, что оно такой же длины, как и ваше сообщение.

Это зависит от сервера к серверу, но я думаю, что вы также должны поставить CRLF после тела вашего сообщения.

,

Проблема была в задержках, кажется это очень важно, получил рабочий код, @Egauss Egauss

можете ли вы дать нам исходный код вашего скетча, @MH Fuad