Как отправить метод POST с JSON? Ардуино УНО R3 + SIM900

Почему серверная часть php не загружает данные из arduino? Что я сделал не так?

  String reading="{\"latitude\": 12.983027,  \"longitude\": 80.2594}";
  mySerial.println("AT+HTTPINIT"); 
  toSerial(1000);

  mySerial.println("AT+HTTPPARA=\"CID\",1"); 
  toSerial(1000);

  mySerial.println("AT+HTTPPARA=\"URL\",\"http://gerro.usermd.net/updateData.php\"");
  toSerial(1000);

  mySerial.println("AT+HTTPPARA=\"CONTENT\", \"application/json\"");
  toSerial(1000);

  mySerial.println("AT+HTTPDATA=" + String(reading.length()) + ",100000");
  toSerial(5000);

  mySerial.println(reading);
  toSerial(1000);

  mySerial.println("AT+HTTPACTION=1"); 
  toSerial(15000);

  mySerial.println("AT+HTTPREAD"); 
  toSerial(1000);

  mySerial.println("AT+HTTPTERM"); 
  toSerial(500);

Результат:

AT+HTTPINIT

OK
AT+HTTPPARA="CID",1

OK
AT+HTTPPARA="URL","http://gerro.usermd.net/updateData.php"

OAT+HTTPPARA="CONTENT", "application/json"

OK
AT+HTTPDATA=46,100000

DOWNLOAD

OK
AT+HTTPACTION=1

OK

+HTTPACTION:1,200,55
AT+HTTPREAD

+HTTPREAD:55
array(0) {
}
array(0) {
}
nic ciekAT+HTTPTERM

OK

Обновление

void toSerial(int delay_ms)
  {
    delay(delay_ms);

    while(mySerial.available()) 
    {
       Serial.write(mySerial.read());
    }
  }

PHP

<?php
var_dump($_POST);
if (isset($_POST['latitude']) && isset($_POST['longitude']) && $_SERVER['REQUEST_METHOD'] === 'POST') {
//code
} else {
echo 'nic';
}

, 👍1

Обсуждение

Что именно делает toSerial()? Опубликуйте все это., @SoreDakeNoKoto

Сначала проверьте свой сервер, насколько я могу судить, ваш сервер возвращает пустой массив, даже когда я тестирую его с помощью Postman, так что это не имеет ничего общего с вашим кодом Arduino. Это ваш php-код, который неправильно обрабатывает запрос POST., @hcheung

@hcheung при тестировании с почтальоном все работает и возвращает данные из $_POST. Я думаю, вы плохо его протестировали. В php файле есть var_dump($_POST) а значит и результирующий массив(0){}, @wgerro

@TisteAndii Я уже отредактировал пост., @wgerro

на сервере php показывает, что не получает CONTENT-TYPE и CONTENT-LENGTH от arduino, @wgerro

Удачи, если вы говорите, что можете получить правильный результат Postman, а я даже не могу его правильно проверить. Если мой тест Postman даст тот же результат, что и ваш код Arduino, о чем это вам говорит?, @hcheung

@hcheung, возможно, вы не включили метод POST, @wgerro

Поверьте мне, я использую Postman ежедневно..., @hcheung

@hcheung, однако, вы были правы, это было неправильно в файле php, вместо $ _POST вам пришлось использовать file_get_contents("php://input") !, @wgerro


1 ответ


1

Вы должны были изменить файл php:

var_dump($_POST);

к:

echo print_r(json_decode(file_get_contents("php://input")));

Спасибо!

,