通过arduino向PHP文件发送POST请求[重复]

Posted

技术标签:

【中文标题】通过arduino向PHP文件发送POST请求[重复]【英文标题】:Sending POST request to PHP file via arduino [duplicate] 【发布时间】:2021-05-03 22:23:39 【问题描述】:

我正在尝试将温度读数发送到我网站中的 php 文件。但是,温度变量似乎没有通过。下面我使用以下 Arduino 代码:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

#define SERVER_IP "XXX.XX.XXX.XX"

#ifndef STASSID
#define STASSID "XXX"
#define STAPSK  "XXX"
#endif

void setup() 
  Serial.begin(115200);
  Serial.println();  Serial.println();  Serial.println();
  WiFi.begin(STASSID, STAPSK);

  while (WiFi.status() != WL_CONNECTED)     delay(500);    Serial.print(".");  
  Serial.println("");  Serial.print("Connected! IP address: ");  Serial.println(WiFi.localIP());


void loop() 
  if ((WiFi.status() == WL_CONNECTED)) 
    WiFiClient client;
    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    http.begin(client, "http://" SERVER_IP "/device.php"); //HTTP
    http.addHeader("Content-Type", "application/json");

    Serial.print("[HTTP] POST...\n");
    int httpCode = http.POST("\"temp\":\"15\"");

    if (httpCode > 0) 
      Serial.printf("[HTTP] POST... code: %d\n", httpCode);

      if (httpCode == HTTP_CODE_OK) 
        const String& payload = http.getString();
        Serial.println("received payload:\n<<");
        Serial.println(payload);
        Serial.println(">>");
      
     else 
      Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());
    

    http.end();
  

  delay(100000);

在我的 device.php 中使用以下代码:

<?php header('Content-type: application/json'); header('Content-Type: text/html; charset=utf-8'); require 'config.php'; 
 header("Access-Control-Allow-Origin: *");

    $temp = $_POST["temp"];
    $ins = mysqli_query($link,"INSERT INTO `test`(`id`,`test`)VALUES(NULL,'$temp')");
        
    $responseArray = array('status' => $_POST);         
    $encoded = json_encode($responseArray);     header('Content-Type: application/json');   echo $encoded;

?>

但是,我最终得到 php 错误提示:

PHP Notice:  Undefined index: temp in /var/www/html/device.php on line 6

我在 mysql 中得到空条目,串行监视器显示空有效负载:

[HTTP] begin...
[HTTP] POST...
[HTTP] POST... code: 200
received payload:
<<
"status":[]
>>

【问题讨论】:

在 PHP 中,执行var_dump($_POST);(在标头之后)以查看输出包含的内容。 @PaulT.it 说空 嗯,这解释了通知。我必须检查一下使用情况,显然 POST 没有达到预期的效果。 不确定,但是...您正在发送 JSON 编码数据,但 PHP 期望来自 POST 的表单编码数据,因此更改您的内容类型标头 application/x-www-form-urlencoded,并将您的数据更改为temp=15。将15 更改为您需要的任何变量。 @TangentiallyPerpendicular 我试过 int httpCode = http.POST("?temp=15"),也没有用。 【参考方案1】:

Tangentially Perpendicular cmets 的解决方案是将内容类型标题更改为

    http.addHeader("Content-Type", "application/x-www-form-urlencoded");

并将数据发布到

    int httpCode = http.POST("temp=15");

【讨论】:

以上是关于通过arduino向PHP文件发送POST请求[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP cURL无法向api发送POST请求

如何用php向服务器发送post请求

Django 使用 CSRF 令牌向 views.py 发送 POST 请求,然后重定向页面

有没有一款软件是能够详细列出php的执行流程,比如说向哪个页面发送get,post请求了,请求的数据等

如何向php服务器发送数据为json的post请求

无法接收 Vue 通过 axios 发送到 PHP 的 Post 数据