Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
http
Webclient
web client HTTP post的时候,出现返回值为500的问题
发布于 2024-02-20 10:40:36 浏览:151
订阅该版
1:创建session ``` session = webclient_session_create(WEBCLIENT_HEADER_BUFSZ); ``` 2:调用webclient_post ``` rc = webclient_post(session, L_POST_NE_URL, NULL, 0); ``` 3: 发送综合部分 ``` /* send mime_multipart */ webclient_write(session, buffer, buffer_ptr - buffer); ``` 4:发送文件数据 ``` /* send file data */ write_session_data(req, session, buffer); ``` 5:发送分隔符 ``` webclient_write(session, buffer, rt_strlen(boundary) + 8); ``` 6:调用返回函数,解析返回参数值 ``` ret = webclient_handle_response(session); ``` 7:函数代码片段 ``` void query_and_post_http_file(evs_service_query_log req, char *uploadUrl) { #define L_POST_NE_URL "http://operation-pre.ne-soft.com/api/com/pileData/file/upload?secretKey=077ac7289f8b4f7080943bb081734442&taskCode=c08bde9536594ad9bad6bb13c795fc06&pileCode=DR2024010211202100175001&upfile" size_t length; char boundary[60]; char form_data[FORM_DATA_LEN]; char url_buffer[URL_BUFF_LEN]; int fd = -1, rc = WEBCLIENT_OK; char *header = RT_NULL, *header_ptr; unsigned char *buffer = RT_NULL, *buffer_ptr; struct webclient_session* session = RT_NULL; int resp_data_len = 0; uint8_t dot_cnt; dot_cnt = count_dot(uploadUrl); replaceString(uploadUrl, url_buffer, dot_cnt); // rt_snprintf(url_buffer, URL_BUFF_LEN, LOG_NE_URL, uploadUrl, req.logQueryNo); // rt_snprintf(url_buffer, URL_BUFF_LEN, "%s", uploadUrl); rt_kprintf("%s %d\r\n", url_buffer, __LINE__); rt_kprintf("req.askType[%d] %d\r\n", req.askType, __LINE__); switch(req.askType) { case E_LOG_TYPE_TRACE: rt_snprintf(form_data, FORM_DATA_LEN, FORM_DATA, "/log/trace.log0"); rt_kprintf("form_data[%s] %d\r\n", form_data, __LINE__); break; case E_LOG_TYPE_ALARM: rt_snprintf(form_data, FORM_DATA_LEN, FORM_DATA, "/log/alarm.log0"); break; case E_LOG_TYPE_ORDER: rt_snprintf(form_data, FORM_DATA_LEN, FORM_DATA, "/order/order_record0.dat"); break; case E_LOG_TYPE_ELEC_METER: rt_snprintf(form_data, FORM_DATA_LEN, FORM_DATA, "/log/meter.log0"); break; case E_LOG_TYPE_BMS: rt_snprintf(form_data, FORM_DATA_LEN, FORM_DATA, "/log/bms.log0"); break; default: break; } buffer = (unsigned char *) web_calloc(1, WEBCLIENT_RESPONSE_BUFSZ); if (buffer == RT_NULL) { LOG_D("post file failed, no memory for response buffer."); rc = -WEBCLIENT_NOMEM; goto __exit; } header = (char *) web_calloc(1, WEBCLIENT_HEADER_BUFSZ); if (header == RT_NULL) { LOG_D("post file failed, no memory for header buffer."); rc = -WEBCLIENT_NOMEM; goto __exit; } header_ptr = header; /* build boundary */ rt_snprintf(boundary, sizeof(boundary), "----------------------------%012d", rt_tick_get()); /* build encapsulated mime_multipart information*/ buffer_ptr = buffer; /* first boundary */ buffer_ptr += rt_snprintf((char*) buffer_ptr, WEBCLIENT_RESPONSE_BUFSZ - (buffer_ptr - buffer), "--%s\r\n", boundary); buffer_ptr += rt_snprintf((char*) buffer_ptr, WEBCLIENT_RESPONSE_BUFSZ - (buffer_ptr - buffer), "Content-Disposition: form-data; %s\r\n", form_data); buffer_ptr += rt_snprintf((char*) buffer_ptr, WEBCLIENT_RESPONSE_BUFSZ - (buffer_ptr - buffer), "Content-Type: application/octet-stream\r\n\r\n"); /* calculate content-length */ length += buffer_ptr - buffer; length += rt_strlen(boundary) + 8; /* add the last boundary */ /* build header for upload */ header_ptr += rt_snprintf(header_ptr, WEBCLIENT_HEADER_BUFSZ - (header_ptr - header), "Content-Length: %d\r\n", length); header_ptr += rt_snprintf(header_ptr, WEBCLIENT_HEADER_BUFSZ - (header_ptr - header), "Content-Type: multipart/form-data; boundary=%s\r\n", boundary); session = webclient_session_create(WEBCLIENT_HEADER_BUFSZ); if(session == RT_NULL) { rc = -WEBCLIENT_NOMEM; goto __exit; } rt_strncpy(session->header->buffer, header, rt_strlen(header)); session->header->length = rt_strlen(session->header->buffer); rt_kprintf("buffer(%s) line[%d]\r\n", session->header->buffer, __LINE__); // rc = webclient_post(session, url_buffer, NULL, 0); rc = webclient_post(session, L_POST_NE_URL, NULL, 0); if(rc < 0) { goto __exit; } /* send mime_multipart */ webclient_write(session, buffer, buffer_ptr - buffer); rt_kprintf("come to this step [%d]\r\n", __LINE__); /* send file data */ write_session_data(req, session, buffer); /* send last boundary */ rt_snprintf((char*) buffer, WEBCLIENT_RESPONSE_BUFSZ, "\r\n--%s--\r\n", boundary); webclient_write(session, buffer, rt_strlen(boundary) + 8); extern int webclient_handle_response(struct webclient_session *session); int ret = 0; ret = webclient_handle_response(session); rt_kprintf("webclient_handle_response ret[%d] line[%d]\r\n", ret, __LINE__); evs_NEevent_fileUploadResult result; if(ret != 200) { rc = -WEBCLIENT_ERROR; result.cmdId = 30; // 文件上传命令码为30 result.result = 11; // 失败 result.reason = ret; memcpy(result.logQueryNo, req.logQueryNo, sizeof(req.logQueryNo)); // 失败 // send_event_NE_file_upload_result(&result); goto __exit; } resp_data_len = webclient_content_length_get(session); if (resp_data_len > 0) { int bytes_read = 0; rt_memset(buffer, 0x00, WEBCLIENT_RESPONSE_BUFSZ); do { bytes_read = webclient_read(session, buffer, resp_data_len < WEBCLIENT_RESPONSE_BUFSZ ? resp_data_len : WEBCLIENT_RESPONSE_BUFSZ); if (bytes_read <= 0) { break; } resp_data_len -= bytes_read; rt_kprintf("recv_data[%s] line[%d]\r\n", buffer, __LINE__); json_t instance = json_new(buffer); const char *name; if (json_value(instance, "data")) { json_t item = json_toChild(instance); if (item) { if (json_value(item, "fileUrl")) { name = json_toString(item); strncpy(result.fileUrl, name, EVS_MAX_LOGAREA_LEN); } json_delete(item); } } json_delete(instance); } while(resp_data_len > 0); result.cmdId = 30; // 文件上传命令码为30 result.result = 10; // 成功 result.reason = 0; // 成功 memcpy(result.logQueryNo, req.logQueryNo, sizeof(req.logQueryNo)); // 失败 // send_event_NE_file_upload_result(&result); } __exit: if (fd >= 0) { close(fd); } if (session != RT_NULL) { webclient_close(session); } if (buffer != RT_NULL) { web_free(buffer); } if (header != RT_NULL) { web_free(header); } return rc; } ``` 8:过程打印 1)开始时候打印 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240220/54b4bc95250bac64282aaf26733715cc.png.webp) 2)结尾500的打印 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240220/242c03a4c8023918f689df0db0cc8fb7.png) 目前上述的过程,传输的内容都一样,但是就是使用demo里面的方式,就能够正常返回200.但是使用自己拼装的函数,就出现了返回500的情况。有没有遇到类似的问题的?
查看更多
2
个回答
默认排序
按发布时间排序
wuguifang
2024-02-20
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考
有试过了,不知道为什么开启tcpdump的时候,再去调用Web_post_test,原本能够正常使用的,也不能正常。感觉可能tcpdump有做网口调用还是什么的。到之后后面socket要调用网口,也不能够正常使用了。 1:开启tcpdump的时候 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240220/cb641c24663a8493471d3797231b727f.png.webp) 2:不开启tcpdump的时候 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240220/2e6e2eedddb5984447cecd6eba162986.png.webp)
xiaorui
认证专家
2024-02-20
小睿手办 https://item.taobao.com/item.htm?id=674889867009
可以抓下网络包,对比下差异。
撰写答案
登录
注册新账号
关注者
0
被浏览
151
关于作者
wuguifang
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考
提问
16
回答
15
被采纳
0
关注TA
发私信
相关问题
1
AT组件连接BC26并使用Webclient软件包GET方式请求失败
2
webclient sal_sock每次send 内存就多占几十字 咋排查
3
webclient使用疑惑 ,post上传数据无效,get下载数据
4
w5500通信不稳定。
5
webclient软件包get接口,等不到response header?
6
webclient使用的建議
7
基于官方 webclient 的 http client
8
stm32使用webclient+mbedtls实现get请求及post太慢
9
Webclient无法下载局域网内的文件
10
webclient的post file的sample,需开启哪个文件系统支持
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【NXP-MCXA153】RTT PIN驱动添加
2
NXP MCXN236测评-FLASH
3
不用开发板都能跑的RT-Thread(保姆级教程)
4
RTTHREAD Doxygen 阅读
5
RT-Thread RISCV64 qemu 极简上手(不用思考就能跑起来)
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
Hardfault
ART-Pi
CAN总线
FinSH
USB
文件系统
DMA
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
packages_软件包
cubemx
freemodbus
PWM
潘多拉开发板_Pandora
定时器
BSP
ADC
flashDB
中断
编译报错
Debug
socket
GD32
msh
keil_MDK
SFUD
ulog
C++_cpp
at_device
MicroPython
本月问答贡献
小小李sunny
3
个答案
4
次被采纳
Rb君
16
个答案
3
次被采纳
xiaorui
9
个答案
2
次被采纳
miandain_7
8
个答案
2
次被采纳
踩姑娘的小蘑菇
8
个答案
2
次被采纳
本月文章贡献
andeyqi
3
篇文章
2
次点赞
Z_Y
2
篇文章
6
次点赞
Lu_盼盼
2
篇文章
1
次点赞
liYony
1
篇文章
12
次点赞
Rb君
1
篇文章
5
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部