README.rst
1.. zephyr:code-sample:: sockets-http-get
2 :name: HTTP GET using plain sockets
3 :relevant-api: bsd_sockets tls_credentials secure_sockets_options
4
5 Implement an HTTP(S) client using plain BSD sockets.
6
7Overview
8********
9
10The sockets/http_get sample application for Zephyr implements a simple
11HTTP GET client using a BSD Sockets compatible API. The purpose of this
12sample is to show how it's possible to develop a sockets application
13portable to both POSIX and Zephyr. As such, it is kept minimal and
14supports only IPv4.
15
16The source code for this sample application can be found at:
17:zephyr_file:`samples/net/sockets/http_get`.
18
19Requirements
20************
21
22- :ref:`networking_with_host`
23- or, a board with hardware networking
24- NAT/routing should be set up to allow connections to the Internet
25- DNS server should be available on the host to resolve domain names
26
27Building and Running
28********************
29
30Build the Zephyr version of the application like this:
31
32.. zephyr-app-commands::
33 :zephyr-app: samples/net/sockets/http_get
34 :board: <board_to_use>
35 :goals: build
36 :compact:
37
38After the sample starts, it issues HTTP GET request to "google.com:80"
39and dumps the response. You can edit the source code to issue a request
40to any other site on the Internet (or on the local network, in which
41case no NAT/routing setup is needed).
42Exit QEMU by pressing :kbd:`CTRL+A` :kbd:`x`.
43
44Enabling TLS support
45=================================
46
47Enable TLS support in the sample by building the project with the
48``overlay-tls.conf`` overlay file enabled, for example, using these commands:
49
50.. zephyr-app-commands::
51 :zephyr-app: samples/net/sockets/http_get
52 :board: qemu_x86
53 :conf: "prj.conf overlay-tls.conf"
54 :goals: build
55 :compact:
56
57An alternative way is to specify ``-DEXTRA_CONF_FILE=overlay-tls.conf`` when
58running ``west build`` or ``cmake``.
59
60For boards that support TLS offloading (e.g. TI's cc3220sf_launchxl), use
61``overlay-tls-offload.conf`` instead of ``overlay-tls.conf``.
62
63The certificate used by the sample can be found in the sample's ``src``
64directory. The certificate was selected to enable access to the default website
65configured in the sample (https://google.com). To access a different web page
66over TLS, provide an appropriate certificate to authenticate to that web server.
67
68Note, that TLS support in the sample depends on non-posix, TLS socket
69functionality. Therefore, it is only possible to run TLS in this sample
70on Zephyr.
71
72Wi-Fi
73=====
74
75The IPv4 Wi-Fi support can be enabled in the sample with
76:ref:`Wi-Fi snippet <snippet-wifi-ipv4>`.
77
78Running application on POSIX Host
79=================================
80
81The same application source code can be built for a POSIX system, e.g.
82Linux. (Note: if you look at the source, you will see that the code is
83the same except the header files are different for Zephyr vs POSIX.)
84
85To build:
86
87.. code-block:: console
88
89 $ make -f Makefile.host
90
91To run:
92
93.. code-block:: console
94
95 $ ./http_get
96
97As can be seen, the behavior of the application is the same as the Zephyr
98version.
99