4

Apologies if this question appears to be too vague but I would like to know the key differences between these two clients.

While WiFiClient comes pre-loaded with Arduino IDE, HttpClient doesn't. Also, to send HTTP commands to a server (XML/JSON), which one to go for?

asked Mar 1, 2016 at 10:39

2 Answers 2

5

WiFiClient provides a raw connection to the internet through a WiFi access point (such as your home router).

HttpClient provides a connection to a web server via an existing Client connection, such as a WiFiClient connection.

So the simplest answer to your question

to send HTTP commands to a server (XML/JSON), which one to go for?

is "Use both".

You use WiFiClient to connect to the internet, then you use HttpClient on your WiFiClient connection to communicate with a website. As it states in the readme on HttpClient's github repository:

Because it expects an object of type Client, you can use it with any of the networking classes that derive from that. Which means it will work with EthernetClient, WiFiClient and GSMClient.

To understand the concept more fully you will first need to understand the OSI 7-Layer Model which is essential reading for anyone doing anything with networking software.

answered Mar 1, 2016 at 10:54
4
  • Can you tell me why aren't they using HttpClient on top of EthernetClient over here: gist.githubusercontent.com/jamesabruce/8bc9faf3c06e30c3f6fc/raw/… Commented Mar 1, 2016 at 11:14
  • 1
    @Hyperbola Because you don't have to use HttpClient. You can do it all yourself manually if you like. HttpClient just saves you the hassle is all. Commented Mar 1, 2016 at 11:15
  • Thanks @Majenko. I have a question posted too regarding Philips Hue; if you could look at it once. Commented Mar 1, 2016 at 11:18
  • 1
    @Hyperbola I have no clue what a Philips Hue is nor how you communicate with it. I would recommend starting simpler and trying to send a GET request to somewhere like Google before dabbling into unknown boxes of tricks. Commented Mar 1, 2016 at 11:21
1

As Majenko Said,

WiFiClient is raw in the sense you have to deal with the HTTP protocol stuff yourself, a shot snippet of raw GET request is provided below

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

each line is terminated with "\r\n", the request is terminated with an empty line

Where as the HttpClient is a library which handle all the low level HTTP protocol stuff and provide simple interface to sent HTTP GET/POST request to any device that support 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();

To send JSON change the header with the below line

http.addHeader("Content-Type", "application/json");

So the answer is if you want to deal with the low level HTTP protocol use WiFiClient else use HTTPClient

answered Oct 19, 2020 at 6:14

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.