找回密码
 立即注册
首页 业界区 安全 ESP32 HTTP Client 报错'Error parse url'

ESP32 HTTP Client 报错'Error parse url'

蚣澡 2025-6-9 14:03:10
ESP32 HTTP Client 报错

今天在使用ESP32中的esp_http_client_init如下
  1. //结构体
  2. typedef struct
  3. {
  4.     char url[256];
  5. } config_t;
  6. //主要代码
  7. strncpy(config.url, "http://xxx/xxx", sizeof(config.url) - 1);
  8. config.url[sizeof(config.url) - 1] = '\0'; // 确保字符串以空字符结尾
  9. static char *download_url;
  10. download_url = config.url;
  11. esp_http_client_config_t config = {
  12.     .url = download_url,
  13.     .event_handler = _http_event_handler,
  14.     .user_data = local_response_buffer,
  15. };
  16. esp_http_client_handle_t client = esp_http_client_init(&config);
复制代码
运行后报错如下:
  1. E (11912) HTTP_CLIENT: Error parse url http://xxx/xxx
  2. E (11922) HTTP_CLIENT: Failed to set URL
复制代码
分析错误来源,猜测如下:

  • 末尾结束符 (这个已经确保)
  • 字符串长度问题(加了printf打印了%s字符串和长度%d strlen(url)发现了长度比原字符串多了一个)
  • 是否有未打印的字符 (增加了ASCII打印发现了末尾多了一个回车符\r)
报错猜想查询确定后开始溯源
我的txt文本格式如下:
  1. LS_COLLAR=https://xxx/xxx
  2. LS_SIZE=xxx
复制代码
我的url来源于txt文本 那么我fopen打开文件读取时,因为有换行,我在处理file时候只处理了\n忘了处理\r,所以打印出来多了一个\r
  1.     FILE *file = fopen(filename, "rb");
  2.     char line[256];
  3.     while (fgets(line, sizeof(line), file))
  4.     {
  5.         // 去除行末的换行符
  6.         line[strcspn(line, "\n")] = 0;
  7.     }
复制代码
现在加上\r再运行
  1.     FILE *file = fopen(filename, "rb");
  2.     char line[256];
  3.     while (fgets(line, sizeof(line), file))
  4.     {
  5.         // 去除行末的\r\n
  6.         line[strcspn(line, "\r\n")] = 0;
  7.     }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册