02HTTP_GET请求
用到的库文件
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
方式一
HTTPClient库用于HTTP协议通讯。通过ESP8266HTTPClient库,
我们可以使用ESP8266利用互联网或局域网向网络服务器发送HTTP请求,
并且分析网络服务器返回的HTTP响应信息,从而实现物联网应用。
方式二
TCP#IP
ESP8266库中还有一个专门用于TCP通讯的WiFiClient库。由于HTTP协议是建立在TCP协议基础之上的,
我们也可以使用WiFiClient库来实现HTTP通讯。在这一点上,ESP8266HTTPClient库与WiFiClient库在功能上形成了互补。
代码思路
- 首先要确保在连接上WIFI的情况下发起请求,
如果和连接以前已经说过,这里就不在解释 - 声明WiFiClient和HTTPClient对象
- 使用HTTPClient类中的begin()函数,建立与服务器的连接,如果连接不上,则打印相应的错误信息,函数的参数类型如下图所示
/**
* parsing the url for all needed parameters
* @param client Client&
* @param url String
* @param https bool
* @return success bool
*/
bool HTTPClient::begin(WiFiClient &client, String url){}
- 使用HTTPClient类中的GET()函数发送GET请求,由函数定义可以知道,返回值为请求的状态码,通过判断状态码确定是否请求成功。判断之后记得要使用HTTPClient类中的end()函数来断开连接
- 如果状态码为200或301,那么就使用getString()拿到请求信息
- 如果状态码为其他,那么就打印报错信息,
/**
* send a GET request
* @return http code
*/
int HTTPClient::GET()
{
return sendRequest("GET");
}
/**
* sends a post request to the server
* @param payload uint8_t *
* @param size size_t
* @return http code
*/
int HTTPClient::POST(uint8_t * payload, size_t size)
{
return sendRequest("POST", payload, size);
}
示例代码
// GET请求获取互联网时间
String getIntnetTime() {
// HTTPClient库用于HTTP协议通讯。通过ESP8266HTTPClient库,
// 我们可以使用ESP8266利用互联网或局域网向网络服务器发送HTTP请求,
// 并且分析网络服务器返回的HTTP响应信息,从而实现物联网应用。
// TCP/IP
// ESP8266库中还有一个专门用于TCP通讯的WiFiClient库。由于HTTP协议是建立在TCP协议基础之上的,
// 我们也可以使用WiFiClient库来实现HTTP通讯。在这一点上,ESP8266HTTPClient库与WiFiClient库在功能上形成了互补。
WiFiClient client;
HTTPClient http;
String payload;
Serial.print("[HTTP] begin...\n");
if (http.begin(client, "http://quan.suning.com/getSysTime.do")) { // HTTP
Serial.print("[HTTP] GET...\n");
// 获取GET请求的响应码
int httpCode = http.GET();
// 如果响应码大于0
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
// 如果相应为200(请求正常) 或者 301重定向
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
// 拿到请求的相应信息
/**
* return all payload as String (may need lot of ram or trigger out of memory!)
* @return String
*/
payload = http.getString();
// 字符串截取,拿到具体时间
payload=payload.substring(13,32);
}
} else {
// 如果HTTPcode < 0那么就是请求失败,打印出失败报错信息
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
// HTTP结束
http.end();
} else {
Serial.printf("[HTTP} Unable to connect\n");
}
return payload;
}