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库在功能上形成了互补。

代码思路

  1. 首先要确保在连接上WIFI的情况下发起请求,
    如果和连接以前已经说过,这里就不在解释
  2. 声明WiFiClient和HTTPClient对象
  3. 使用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){}
  1. 使用HTTPClient类中的GET()函数发送GET请求,由函数定义可以知道,返回值为请求的状态码,通过判断状态码确定是否请求成功。判断之后记得要使用HTTPClient类中的end()函数来断开连接
  1. 如果状态码为200或301,那么就使用getString()拿到请求信息
  2. 如果状态码为其他,那么就打印报错信息,
/**
 * 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);
}

esp8266_GetIPD函数 esp8266 get请求_esp8266_GetIPD函数

esp8266_GetIPD函数 esp8266 get请求_esp8266_GetIPD函数_02

示例代码

// 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;
}