esp32 post 提交json数据登录网站

ps:用于自己的学习记录,刚开始接触esp32和http协议,对很多细节不理解,只能跟着一些例程做自己摸索一下,误打误撞成功了。

 在用esp32登录一个网址的时候一直返回302,意思是需要重定向,后来猛的一想,可能是需要登录上一个界面,才能到达下一个界面。然后我就一直尝试登录网址。

一开始我使用的方式是post提交表单数据,提交成功,但是在get本身的网址的时候一直返回-11,后来琢磨了好久都没搞明白为什么提交表单数据不行,猜测可能是那个网址不接受表单数据或者是需要什么权限,后来提交json数据试了一下,竟然成功了。下面是代码,写的不是特别好,不过意思是对的。

 StaticJsonDocument<200> jsondata;
    jsondata["username"] = "username";
    jsondata["password"] = "password";
    String jsonString;
    serializeJson(jsondata, jsonString);// 将JSON对象转换为字符串

    // 设置请求标头为application/json
    http.addHeader("Content-Type", "application/json");

    int httpResponseCode = http.POST(jsonString);
    if (httpResponseCode != HTTP_CODE_OK) 
    {
      Serial.println(httpResponseCode);
    }

    else
    {
        Serial.printf("POST Success!\n");
    }

可以成功提交json数据,但是有时无法提交成功,再提交一次就好了,可以在加一些逻辑判断,不成功就继续提交,这里仅作记录。

在提交数据之前先登录网址,下面是代码,形参改成 网址字符串就行。 

void HTTP_Connection(const char* url)
{
      int connect_cnt=0;
     if((WiFi.status() == WL_CONNECTED)) 
     {
        //连接网址
        Serial.printf("Connecting to Http...");
        http.begin(url);        
        int httpcode = http.GET(); // 发起GET请求
        if(httpcode==200)
        {
             Serial.printf("success!\n");
        }
        while((httpcode!=200)&&(connect_cnt!=5))
        {
          connect_cnt++;
          http.begin(url);
          httpcode = http.GET();
          Serial.printf("httpcode:%d\n",httpcode); 
          if(httpcode==200)
          {
             Serial.printf("success!\n");
          }        
        }        
     }
     else
     {
         Serial.printf("NO WIFI\n");
     }   
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  
要在 ESP32 上发送 POST 请求,你需要使用 ESP32 HTTP 客户端库(例如 ESP32 HTTPClient 库)。下面是一个发送 POST 请求的示例代码: ```c++ #include <WiFi.h> #include <HTTPClient.h> const char* ssid = "你的 WiFi 名称"; const char* password = "你的 WiFi 密码"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("正在连接 WiFi..."); } Serial.println("WiFi 连接成功"); } void loop() { HTTPClient http; http.begin("http://example.com/api/data"); // 设置请求的 URL http.addHeader("Content-Type", "application/json"); // 设置请求头 String requestBody = "{\"key\":\"value\"}"; // 设置请求体 int httpResponseCode = http.POST(requestBody); // 发送 POST 请求并获取响应码 if (httpResponseCode > 0) { Serial.println(http.getString()); // 打印响应消息体 Serial.println(httpResponseCode); // 打印响应码 } else { Serial.println("发送失败"); } http.end(); delay(5000); } ``` 在这个示例代码中,我们首先连接到 WiFi 网络,然后使用 `HTTPClient` 类创建一个 HTTP 客户端对象。在 `http.begin()` 方法中设置请求的 URL,`http.addHeader()` 方法设置请求头,`requestBody` 变量设置请求体。 `http.POST()` 方法发送 POST 请求,并返回响应码。最后,我们使用 `http.getString()` 方法获取响应消息体,并使用 `Serial.println()` 方法打印响应消息体和响应码。 注意,你需要将 `ssid` 和 `password` 变量替换为你的 WiFi SSID 和密码。同时,你需要将 `http.begin()` 方法中的 URL 替换为你需要请求的 URL。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值