mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
62 lines
2.8 KiB
Markdown
62 lines
2.8 KiB
Markdown
| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 |
|
|
| ----------------- | ----- | -------- | -------- | -------- |
|
|
|
|
# Simple HTTPD Server Example
|
|
|
|
The Example consists of HTTPD server demo with demostration of URI handling :
|
|
1. URI \hello for GET command returns "Hello World!" message
|
|
2. URI \echo for POST command echoes back the POSTed message
|
|
|
|
## How to use example
|
|
|
|
### Hardware Required
|
|
|
|
* A development board with ESP32/ESP32-S2/ESP32-C3 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.)
|
|
* A USB cable for power supply and programming
|
|
|
|
### Configure the project
|
|
|
|
```
|
|
idf.py menuconfig
|
|
```
|
|
* Open the project configuration menu (`idf.py menuconfig`) to configure Wi-Fi or Ethernet. See "Establishing Wi-Fi or Ethernet Connection" section in [examples/protocols/README.md](../../README.md) for more details.
|
|
|
|
### Build and Flash
|
|
|
|
Build the project and flash it to the board, then run monitor tool to view serial output:
|
|
|
|
```
|
|
idf.py -p PORT flash monitor
|
|
```
|
|
|
|
(Replace PORT with the name of the serial port to use.)
|
|
|
|
(To exit the serial monitor, type ``Ctrl-]``.)
|
|
|
|
See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
|
|
|
|
### Test the example :
|
|
* run the test script : "python scripts/client.py \<IP\> \<port\> \<MSG\>"
|
|
* the provided test script first does a GET \hello and displays the response
|
|
* the script does a POST to \echo with the user input \<MSG\> and displays the response
|
|
* or use curl (asssuming IP is 192.168.43.130):
|
|
1. "curl 192.168.43.130:80/hello" - tests the GET "\hello" handler
|
|
2. "curl -X POST --data-binary @anyfile 192.168.43.130:80/echo > tmpfile"
|
|
* "anyfile" is the file being sent as request body and "tmpfile" is where the body of the response is saved
|
|
* since the server echoes back the request body, the two files should be same, as can be confirmed using : "cmp anyfile tmpfile"
|
|
3. "curl -X PUT -d "0" 192.168.43.130:80/ctrl" - disable /hello and /echo handlers
|
|
4. "curl -X PUT -d "1" 192.168.43.130:80/ctrl" - enable /hello and /echo handlers
|
|
|
|
## Example Output
|
|
```
|
|
I (9580) example_connect: - IPv4 address: 192.168.194.219
|
|
I (9580) example_connect: - IPv6 address: fe80:0000:0000:0000:266f:28ff:fe80:2c74, type: ESP_IP6_ADDR_IS_LINK_LOCAL
|
|
I (9590) example: Starting server on port: '80'
|
|
I (9600) example: Registering URI handlers
|
|
I (66450) example: Found header => Host: 192.168.194.219
|
|
I (66460) example: Request headers lost
|
|
```
|
|
|
|
## Troubleshooting
|
|
* If the server log shows "httpd_parse: parse_block: request URI/header too long", especially when handling POST requests, then you probably need to increase HTTPD_MAX_REQ_HDR_LEN, which you can find in the project configuration menu (`idf.py menuconfig`): Component config -> HTTP Server -> Max HTTP Request Header Length
|