ESP32 HTTP Client 报错'Error parse url'

Toretto·2024-12-24 12:27·29 次阅读

ESP32 HTTP Client 报错'Error parse url'

ESP32 HTTP Client 报错

今天在使用ESP32中的esp_http_client_init如下

Copy
//结构体 typedef struct { char url[256]; } config_t; //主要代码 strncpy(config.url, "http://xxx/xxx", sizeof(config.url) - 1); config.url[sizeof(config.url) - 1] = '\0'; // 确保字符串以空字符结尾 static char *download_url; download_url = config.url; esp_http_client_config_t config = { .url = download_url, .event_handler = _http_event_handler, .user_data = local_response_buffer, }; esp_http_client_handle_t client = esp_http_client_init(&config);

运行后报错如下:

Copy
E (11912) HTTP_CLIENT: Error parse url http://xxx/xxx E (11922) HTTP_CLIENT: Failed to set URL

分析错误来源,猜测如下:

  1. 末尾结束符 (这个已经确保)
  2. 字符串长度问题(加了printf打印了%s字符串和长度%d strlen(url)发现了长度比原字符串多了一个)
  3. 是否有未打印的字符 (增加了ASCII打印发现了末尾多了一个回车符\r)

报错猜想查询确定后开始溯源

我的txt文本格式如下:

Copy
LS_COLLAR=https://xxx/xxx LS_SIZE=xxx

我的url来源于txt文本 那么我fopen打开文件读取时,因为有换行,我在处理file时候只处理了\n忘了处理\r,所以打印出来多了一个\r

Copy
FILE *file = fopen(filename, "rb"); char line[256]; while (fgets(line, sizeof(line), file)) { // 去除行末的换行符 line[strcspn(line, "\n")] = 0; }

现在加上\r再运行

Copy
FILE *file = fopen(filename, "rb"); char line[256]; while (fgets(line, sizeof(line), file)) { // 去除行末的\r\n line[strcspn(line, "\r\n")] = 0; }
posted @   sixteenccc  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
点击右上角即可分享
微信分享提示