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");
}
}