Разница между WiFiClient и HttpClient
Прошу прощения, если этот вопрос покажется вам слишком расплывчатым, но я хотел бы знать ключевые различия между этими двумя клиентами.
В то время как WiFiClient поставляется с предварительно загруженной Arduino IDE, HttpClient этого не делает. Кроме того, для отправки HTTP-команд на сервер (XML / JSON), какой из них выбрать?
@LSA747, 👍4
2 ответа
WiFiClient обеспечивает прямое подключение к Интернету через точку доступа Wi-Fi (например, ваш домашний маршрутизатор).
HttpClient обеспечивает соединение с веб-сервером через существующее клиентское соединение, такое как соединение WiFiClient.
Итак, самый простой ответ на ваш вопрос
чтобы отправлять HTTP-команды на сервер (XML / JSON), какой из них выбрать?
это "Использовать и то, и другое".
Вы используете WiFiClient для подключения к Интернету, затем вы используете HttpClient в своем соединении WiFiClient для связи с веб-сайтом. Как указано в readme в репозитории HttpClient на github:
Поскольку он ожидает объект типа Client, вы можете использовать его с любым из сетевых классов, которые являются производными от него. Это означает, что он будет работать с EthernetClient, WiFiClient и GSMClient.
Чтобы более полно понять концепцию, вам сначала нужно разобраться в 7-слойной модели OSI, которая необходима для чтения всем, кто что-либо делает с сетевым программным обеспечением.
Как сказал Маенко,
WiFiClient является необработанным в том смысле, что вам приходится самостоятельно разбираться с материалами протокола HTTP, ниже приведен фрагмент необработанного запроса GET
WiFiClient wc;
wc.print("GET ");
wc.print(/xml/device_description.xml);
wc.println(" HTTP/1.1");
wc.print("Host: ");
wc.println(selectedDevice->getIp());
wc.println("Connection: close"); //automatically close Connection
wc.println("");
каждая строка завершается символом "\r\n", запрос завершается пустой строкой
Где как HttpClient - это библиотека, которая обрабатывает все материалы протокола HTTP низкого уровня и предоставляет простой интерфейс для отправки HTTP-запроса GET / POST на любое устройство, поддерживающее HTTP
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type", "text/plain");
int httpResponseCode = http.POST("Hi Sending POST request");
Serial.println(httpResponseCode);
http.end();
Чтобы отправить JSON, измените заголовок на нижеприведенную строку
http.addHeader("Content-Type", "application/json");
Итак, ответ таков: если вы хотите иметь дело с низкоуровневым протоколом HTTP, используйте WiFiClient, в противном случае используйте HttpClient
- Как подключиться к Arduino с помощью WiFi?
- ESP8266 не подключается к Wi-Fi
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- WebSocketsServer.h: No such file or directory
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
Можете ли вы сказать мне, почему они не используют HttpClient поверх EthernetClient здесь: https://gist.githubusercontent.com/jamesabruce/8bc9faf3c06e30c3f6fc/raw/11bbfe799a4122035963f8c6ee5cf3dac670ba7f/Control%20Philips%20Hue%20from%20Arduino%20Ether, @Hyperbola
@Hyperbola Потому что вам *не нужно* использовать HttpClient. Вы можете сделать все это самостоятельно вручную, если хотите. HttpClient просто избавляет вас от хлопот., @Majenko
Спасибо @Majenko. У меня также есть вопрос относительно Philips Hue; если бы вы могли посмотреть на это один раз., @Hyperbola
@Hyperbola Я понятия не имею, что такое Philips Hue и как вы с ним общаетесь. Я бы порекомендовал начать с более простого и попытаться отправить запрос GET куда-нибудь вроде Google, прежде чем лезть в неизвестные коробки трюков., @Majenko