Skip to content

tuanpmt/esp-request

Repository files navigation

Lightweight HTTP client for ESP32

Example

This project is no longer supported, please use

https://github /espressif/esp-idf/tree/master/components/esp_http_client

intdownload_callback(request_t*req,char*data,intlen)
{
req_list_t*found = req->response->header;
while(found->next!=NULL) {
found = found->next;
ESP_LOGI(TAG,"Response header %s:%s",(char*)found->key,(char*)found->value);
}
//or
found =req_list_get_key(req->response->header,"Content-Length");
if(found) {
ESP_LOGI(TAG,"Get header %s:%s",(char*)found->key,(char*)found->value);
}
ESP_LOGI(TAG,"%s",data);
return0;
}
staticvoidrequest_task(void*pvParameters)
{
request_t*req;
intstatus;
xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT,false,true,portMAX_DELAY);
ESP_LOGI(TAG,"Connected to AP, freemem=%d",esp_get_free_heap_size());
//vTaskDelay(1000/portTICK_RATE_MS);
req =req_new("http://httpbin.org/post");
//or
//request *req = req_new( "https://google" ); //for SSL
req_setopt(req, REQ_SET_METHOD,"POST");
req_setopt(req, REQ_SET_POSTFIELDS,"test=data&test2=data2");
req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_callback);
status =req_perform(req);
req_clean(req);
vTaskDelete(NULL);
}

Websocket

intwebsocket_cb(request_t*req,intstatus,void*buffer,intlen)
{
switch(status) {
caseWS_CONNECTED:
ESP_LOGI(TAG,"websocket connected");
req_write(req,"hello world",11);
break;
caseWS_DATA:
((char*)buffer)[len] =0;
ESP_LOGI(TAG,"websocket data = %s",(char*)buffer);
req_close(req);
break;
caseWS_DISCONNECTED:
ESP_LOGI(TAG,"websocket disconnected");
req_clean(req);
req =NULL;
break;
}
return0;
}
voidapp()
{
request_t*req =req_new("ws://echo.websocket.org");//or wss://echo.websocket.org
req_setopt(req, REQ_FUNC_WEBSOCKET, websocket_cb);
req_perform(req);
}

Usage

API

Function

  • req_new
  • req_setopt
  • req_clean

Options forreq_setopt

  • REQ_SET_METHOD -req_setopt(req, REQ_SET_METHOD, "GET" );//or POST/PUT/DELETE
  • REQ_SET_HEADER -req_setopt(req, REQ_SET_HEADER, "HeaderKey: HeaderValue" );
  • REQ_SET_HOST -req_setopt(req, REQ_SET_HOST, "google" ); //or 192.168.0.1
  • REQ_SET_PORT -req_setopt(req, REQ_SET_PORT, "80" );//must be string
  • REQ_SET_PATH -req_setopt(req, REQ_SET_PATH, "/path" );
  • REQ_SET_SECURITY
  • REQ_SET_URI -req_setopt(req, REQ_SET_URI, "http://uri" ); //will replace host, port, path, security and Auth if present
  • REQ_SET_DATAFIELDS
  • REQ_SET_UPLOAD_LEN - Not effect for now
  • REQ_FUNC_DOWNLOAD_CB -req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_callback);
  • REQ_FUNC_UPLOAD_CB
  • REQ_FUNC_WEBSOCKET
  • REQ_REDIRECT_FOLLOW -req_setopt(req, REQ_REDIRECT_FOLLOW, "true" ); //or "false"

URI format

Todo

  • Support URI parser
  • Follow redirect
  • Support SSL
  • Support Set POST Fields (simple)
  • Support Websocket & Websocket Secure
  • Support Basic Auth
  • Support Upload multipart
  • Support Cookie

Known Issues

  • Uri parse need more work

Authors