{"id":16242051,"url":"https://github.com/tuanpmt/esp-request","last_synced_at":"2025-07-30T12:09:56.414Z","repository":{"id":77240909,"uuid":"82755571","full_name":"tuanpmt/esp-request","owner":"tuanpmt","description":"This project is no longer supported, please use","archived":false,"fork":false,"pushed_at":"2018-05-24T01:26:08.000Z","size":56,"stargazers_count":62,"open_issues_count":10,"forks_count":34,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-06-21T15:04:44.450Z","etag":null,"topics":["esp-request","esp32","fota","http-client","https","ota"],"latest_commit_sha":null,"homepage":"https://github.com/espressif/esp-idf/tree/master/components/esp_http_client","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tuanpmt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-22T03:19:49.000Z","updated_at":"2024-01-04T06:30:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"4da58908-d9ee-450e-95b2-1428f5519f08","html_url":"https://github.com/tuanpmt/esp-request","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tuanpmt/esp-request","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuanpmt%2Fesp-request","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuanpmt%2Fesp-request/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuanpmt%2Fesp-request/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuanpmt%2Fesp-request/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tuanpmt","download_url":"https://codeload.github.com/tuanpmt/esp-request/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuanpmt%2Fesp-request/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267866260,"owners_count":24157344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esp-request","esp32","fota","http-client","https","ota"],"created_at":"2024-10-10T14:09:20.116Z","updated_at":"2025-07-30T12:09:56.383Z","avatar_url":"https://github.com/tuanpmt.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lightweight HTTP client for ESP32 \n## Example \n\n## This project is no longer supported, please use\n\nhttps://github.com/espressif/esp-idf/tree/master/components/esp_http_client\n\n\n```cpp\nint download_callback(request_t *req, char *data, int len)\n{\n    req_list_t *found = req-\u003eresponse-\u003eheader;\n    while(found-\u003enext != NULL) {\n        found = found-\u003enext;\n        ESP_LOGI(TAG,\"Response header %s:%s\", (char*)found-\u003ekey, (char*)found-\u003evalue);\n    }\n    //or \n    found = req_list_get_key(req-\u003eresponse-\u003eheader, \"Content-Length\");\n    if(found) {\n        ESP_LOGI(TAG,\"Get header %s:%s\", (char*)found-\u003ekey, (char*)found-\u003evalue);\n    }\n    ESP_LOGI(TAG,\"%s\", data);\n    return 0;\n}\nstatic void request_task(void *pvParameters)\n{\n    request_t *req;\n    int status;\n    xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true, portMAX_DELAY);\n    ESP_LOGI(TAG, \"Connected to AP, freemem=%d\",esp_get_free_heap_size());\n    // vTaskDelay(1000/portTICK_RATE_MS);\n    req = req_new(\"http://httpbin.org/post\"); \n    //or\n    //request *req = req_new(\"https://google.com\"); //for SSL\n    req_setopt(req, REQ_SET_METHOD, \"POST\");\n    req_setopt(req, REQ_SET_POSTFIELDS, \"test=data\u0026test2=data2\");\n    req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_callback);\n    status = req_perform(req);\n    req_clean(req);\n    vTaskDelete(NULL);\n}\n\n```\n\n## Websocket\n\n```cpp\n\nint websocket_cb(request_t *req, int status, void *buffer, int len)\n{\n    switch(status) {\n        case WS_CONNECTED:\n            ESP_LOGI(TAG, \"websocket connected\");\n            req_write(req, \"hello world\", 11);\n            break;\n        case WS_DATA:\n            ((char*)buffer)[len] = 0;\n            ESP_LOGI(TAG, \"websocket data = %s\", (char*)buffer);\n            req_close(req);\n            break;\n        case WS_DISCONNECTED:\n            ESP_LOGI(TAG, \"websocket disconnected\");\n            req_clean(req);\n            req = NULL;\n            break;\n    }\n    return 0;\n}\nvoid app()\n{\n    request_t *req = req_new(\"ws://echo.websocket.org\"); // or wss://echo.websocket.org\n    req_setopt(req, REQ_FUNC_WEBSOCKET, websocket_cb);\n    req_perform(req);\n}\n\n```\n\n## Usage \n- Create ESP-IDF application https://github.com/espressif/esp-idf-template\n- Clone `git submodule add https://github.com/tuanpmt/esp-request components/esp-request`\n- Example `esp-request` application: https://github.com/tuanpmt/esp-request-app\n- OTA application using `esp-request`: https://github.com/tuanpmt/esp32-fota\n\n## API \n\n### Function\n- `req_new`\n- `req_setopt`\n- `req_clean`\n\n### Options for `req_setopt`  \n- REQ_SET_METHOD - `req_setopt(req, REQ_SET_METHOD, \"GET\");//or POST/PUT/DELETE`\n- REQ_SET_HEADER - `req_setopt(req, REQ_SET_HEADER, \"HeaderKey: HeaderValue\");`\n- REQ_SET_HOST - `req_setopt(req, REQ_SET_HOST, \"google.com\"); //or 192.168.0.1`\n- REQ_SET_PORT - `req_setopt(req, REQ_SET_PORT, \"80\");//must be string`\n- REQ_SET_PATH - `req_setopt(req, REQ_SET_PATH, \"/path\");`\n- REQ_SET_SECURITY\n- REQ_SET_URI  - `req_setopt(req, REQ_SET_URI, \"http://uri.com\"); //will replace host, port, path, security and Auth if present`\n- REQ_SET_DATAFIELDS\n- REQ_SET_UPLOAD_LEN - Not effect for now\n- REQ_FUNC_DOWNLOAD_CB - `req_setopt(req, REQ_FUNC_DOWNLOAD_CB, download_callback);`\n- REQ_FUNC_UPLOAD_CB\n- REQ_FUNC_WEBSOCKET\n- REQ_REDIRECT_FOLLOW - `req_setopt(req, REQ_REDIRECT_FOLLOW, \"true\"); //or \"false\"`\n\n### URI format \n- Follow this: https://en.wikipedia.org/wiki/Uniform_Resource_Identifier\n\n## Todo  \n- [x] Support URI parser\n- [x] Follow redirect\n- [x] Support SSL\n- [x] Support Set POST Fields (simple)\n- [x] Support Websocket \u0026 Websocket Secure\n- [ ] Support Basic Auth\n- [ ] Support Upload multipart\n- [ ] Support Cookie\n\n## Known Issues \n- Uri parse need more work\n\n## Authors\n- [Tuan PM](https://twitter.com/tuanpmt)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftuanpmt%2Fesp-request","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftuanpmt%2Fesp-request","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftuanpmt%2Fesp-request/lists"}