ESP-IDF HTTP POST哀求发送音频-启明云端乐鑫代理商

[复制链接]
发表于 2024-11-4 02:00:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
ESP32 HTTP POST哀求发送音频

ESP32中 有 HTTP 相干的哀求 demo,但是 demo 中只是简朴的 HTTP headers 加上 body。如果服务器对 POST 哀求有要求,好比数据以 key-value 的情势传输,那么服务器会无法正常处理哀求。
POST哀求

什么是 POST

POST 是 HTTP 的哀求方法,主要用于向指定资源提交数据进行处理哀求(例如提交表单或者上传文件),数据被包含在哀求体中。POST哀求大概会导致新的资源的建立和/或已有资源的修改。
Post哀求一般由哀求行哀求头哀求体构成。下面列举一段简朴的 post 哀求数据,并加以分析。
  1. POST /api/v1/resource HTTP/1.1
  2. Host: example.com
  3. Content-Type: application/json
  4. Content-Length: 56
  5. {
  6.     "name": "John Doe",
  7.     "email": "john.doe@example.com"
  8. }
复制代码
  1. POST /api/v1/resource HTTP/1.1
  2. #这一部分是请求行,包含了请求的类型(POST)、请求的路径(/api/v1/resource)以及使用的 HTTP 协议版本(HTTP/1.1)。
复制代码
  1. Host: example.com
  2. Content-Type: application/json
  3. Content-Length: 56
  4. #这一部分是请求头,提供了关于请求的附加信息。包括目标主机(Host)、内容类型(Content-Type)和请求体的长度(Content-Length)。
复制代码
注意:哀求头和哀求体中间有个空行!
  1. {
  2.     "name": "John Doe",
  3.     "email": "john.doe@example.com"
  4. }
  5. #这一部分是请求的主体部分,包含了要发送的数据(在这个例子中是JSON格式的用户信息)。
复制代码
POST哀求发送音频

通过 postman 工具,在获取哀求的数据内容后,把哀求行、哀求头、哀求体拼接。
其中,须要传输的音频通过 [spiffs 文件](SPIFFS 文件系统 - ESP32 - — ESP-IDF 编程指南 latest 文档)系统读写,
  1. void http_send_mp3(){
  2.     //读取音频文件
  3.     //...
  4.     long file_size = ftell(file);
  5.     char *file_content = malloc(file_size);
  6.     //file_content 是获取的音频数据, file_size 是音频数据的长度
  7.     fread(file_content, 1, file_size, file);
  8.     //...
  9.    
  10.     esp_http_client_config_t config = {
  11.         .url = POST_URL,
  12.         .event_handler = http_event_handler,
  13.         .method = HTTP_METHOD_POST,
  14.     };
  15.     esp_http_client_handle_t client = esp_http_client_init(&config);
  16.    
  17.      char *post_data = malloc(file_size + 512);
  18.     memset(post_data, 0, file_size + 512);
  19.     memcpy(post_data, "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name="file"; filename="test.mp3"\r\nContent-Type: audio/mpeg\r\n\r\n", 135);
  20.     memcpy(post_data + 135, file_content, file_size);
  21.     memcpy(post_data + 135 + file_size, "\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--\r\n", 45);
  22.     esp_http_client_set_post_field(client, post_data, 180 + file_size);
  23.     esp_err_t err = esp_http_client_perform(client);
  24.     esp_http_client_cleanup(client);
  25.         }
  26. }
  27. //name=“file”,file即为服务器需要post请求携带的key。
复制代码
确保拼接的格式与 postman 中的报文同等,如遇服务器无法正常处理的征象,可以用 wireshark 或者其他抓包软件抓包,看看 esp32 发送的 POST 报文 body 中的数据格式跟用 POSTMAN 发送的报文同等。
参考链接

https://github.com/espressif/esp-idf/tree/master/examples/protocols/esp_http_client
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/protocols/esp_http_server.html#http

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

快速回复 返回顶部 返回列表