Модуль Sim808 Неверный HTTP-запрос

У меня есть Arduino UNO и sim808 EVB-V3.02.4. Я хочу отправить GET-запрос на свой URL-адрес, но всегда получаю сообщение об ошибке 400 Http – неверный запрос.

#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>

#define PIN_TX    7
#define PIN_RX    8
SoftwareSerial mySerial(PIN_TX,PIN_RX);
DFRobot_SIM808 sim808(&mySerial);//подключить RX,TX,PWR,

char http_cmd[] = "GET /index.php?lat=10&long=100 HTTP/1.0\r\n\r\n";
char buffer[512];

void setup() {
  mySerial.begin(9600);
  Serial.begin(9600);
}

void loop() {
  //************ Попытка DHCP *******************
  while(!sim808.join(F("cmnet"))) {
      Serial.println("Sim808 join network error");
      delay(2000);
  }

  //************ Успешный DHCP ****************
  Serial.print("IP Address is ");
  Serial.println(sim808.getIPAddress());

  //************ Установить TCP-соединение ************
  while(!sim808.connect(TCP,"39c309ae.ngrok.io", 80)) {
      Serial.println("Connect error");
  }
  Serial.println("Connection success");


  //************ Отправка GET-запроса *******************
  Serial.println("waiting to fetch...");
  sim808.send(http_cmd, sizeof(http_cmd)-1);
  while (true) {
      int ret = sim808.recv(buffer, sizeof(buffer)-1);
      if (ret <= 0){
          Serial.println("fetch over...");
          break; 
      }
      buffer[ret] = '\0';
      Serial.print("Recv: ");
      Serial.print(ret);
      Serial.print(" bytes: ");
      Serial.println(buffer);
      break;
  }

  //************* Закрыть соединения TCP или UDP **********
  sim808.close();

  //*** Отключить беспроводное соединение, закрыть движущуюся сцену *******
  sim808.disconnect();
  delay(5000);  
  }

Мой php-код:

<?php
file_put_contents('test.txt', $_GET['lat'] . '---' . $_GET['lon']);
print '
<html>
<head>
<title>Good</title>
</head>
<body>
Was Good
</body>
</html>
';
?>

Я хочу просто открыть http://39c309ae.ngrok.io/index.php?lat =10&amp;long=100 с arduino и sim808.

Что не так в моих кодах?

, 👍0


1 ответ


Лучший ответ:

1

Вы не отправляете заголовок Host: вместе со своим запросом. Без этого веб-сервер не знает, с какого веб-сайта вы хотите получить страницу /index.php.

char http_cmd[] = "GET /index.php?lat=10&long=100 HTTP/1.0\r\n"
                  "Host: 39c309ae.ngrok.io\r\n"
                  "\r\n";
,

здорово поработал! большое спасибо! из-за низкой моей репутации я не могу отметить ваш вопрос как лучший ответ! в любом случае, спасибо, @Pooya Behravesh