Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Network
请教 httpclient 如何 Post 数据
发布于 2019-05-28 11:04:10 浏览:1687
订阅该版
* 本帖最后由 aozima 于 2019-5-28 11:23 编辑 * 这是我们目前做的应用开发 把照片post到指定的服务器 ,目前没有头绪,请大神知道 ![微信图片_20190528110311.png](https://oss-club.rt-thread.org/uploads/201905/28/110318v0ymlrocr0d77d70.png)
查看更多
13
个回答
默认排序
按发布时间排序
wangbo
2019-05-28
这家伙很懒,什么也没写!
目前使用PKG webclient v1.00 PKG Cjson V1.02
aozima
2019-05-28
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
[i=s] 本帖最后由 aozima 于 2019-5-28 11:36 编辑 [/i] open/write/close 示例中有post和文件上传的。 另外,楼主给的文档不详细哦,反正我是看不明白。 让出文档的给出个示例或CURL的命令示例出来。 既然post数据类型是表单,那这个json格式又在哪里?表单名又是什么? 文件的表单名又是什么? 文档中都没有说 让给个测试用的html文件也可以的
wangbo
2019-05-28
这家伙很懒,什么也没写!
能在详细一点吗?
wangbo
2019-05-28
这家伙很懒,什么也没写!
接口参数属于哪一部分?是放在header里面 还是 uri中?
Cheney_Chen
2019-05-28
这家伙很懒,什么也没写!
为啥不用最新版本 Webclient 2.1.0,最新版有详细的文档说明怎么使用,也有 GET POST示例文件参考
wangbo
2019-05-31
这家伙很懒,什么也没写!
目前用的最新版本 Webclient 2.1.0 #include
#include
#include
#include
#include
#define DBG_ENABLE #define DBG_SECTION_NAME "web.file" #ifdef WEBCLIENT_DEBUG #define DBG_LEVEL DBG_LOG #else #define DBG_LEVEL DBG_INFO #endif /* WEBCLIENT_DEBUG */ #define DBG_COLOR #include
unsigned char Response[4096]; size_t responselen; int webclient_post_pic(const char* URI, const char* filename, const char* form_data) { int total_write = 0; size_t length; char boundary[60]; 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; fd = open(filename, O_RDONLY, 0); if (fd < 0) { LOG_D("post file failed, open file(%s) error.", filename); rc = -WEBCLIENT_FILE_ERROR; goto __exit; } /* get the size of file */ length = lseek(fd, 0, SEEK_END); lseek(fd, 0, SEEK_SET); buffer = (unsigned char *) web_malloc(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_malloc(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-Type: application/json;charset=utf-8\r\n\r\n"); "Content-Type: raw\r\n\r\n"); buffer_ptr += rt_snprintf((char*) buffer_ptr, WEBCLIENT_RESPONSE_BUFSZ - (buffer_ptr - buffer), "{\"ID\":\"9020\",\"User\":\"\",\"PSW\":\"\",\"MODE\":\"0\"}\r\n"); /* ÕÕƬ*/ 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 ¼ÆËãbody³¤¶È */ length += buffer_ptr - buffer; length += rt_strlen(boundary) + 6; /* 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; } session->header->buffer = header; //rc = webclient_post(session, URI, NULL); rc = webclient_connect(session, URI); if(rc != WEBCLIENT_OK) { goto __exit; } /* ×éÍ·*/ if (webclient_header_fields_add(session, "POST %s HTTP/1.1\r\n", session->req_url) < 0) return -WEBCLIENT_NOMEM; if (webclient_header_fields_add(session, "Host: %s\r\n", session->host) < 0) return -WEBCLIENT_NOMEM; if (webclient_header_fields_add(session, "Content-Length: %d\r\n", length) < 0) return -WEBCLIENT_NOMEM; if (webclient_header_fields_add(session, "Content-Type: multipart/form-data; boundary=%s\r\n\r\n", boundary) < 0) return -WEBCLIENT_NOMEM; webclient_write(session, (unsigned char *) session->header->buffer, session->header->length); /* send mime_multipart */ webclient_write(session, buffer, buffer_ptr - buffer); /* send file data */ while (1) { length = read(fd, buffer, WEBCLIENT_RESPONSE_BUFSZ); if (length <= 0) { break; } total_write = webclient_write(session, buffer, length); if(total_write < 0) { total_write = 0; } } /* send last boundary */ rt_snprintf((char*) buffer, WEBCLIENT_RESPONSE_BUFSZ, "\r\n--%s--\r\n", boundary); webclient_write(session, buffer, rt_strlen(boundary) + 6); responselen = webclient_read(session,Response,4096); rt_kprintf("%s",Response); if(bblen) { bblen = 0; } __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 0; } #define POST_URL "http://172.16.9.158:8008/DJPT/WellPhoto.ashx?op=dealPhotoData" #define FORM_DATA "name=\"Photo\"; filename=\"902020190529094350.jpg\"" void wpost() { webclient_post_pic(POST_URL,"/902020190529095230.jpg",FORM_DATA); } #ifdef FINSH_USING_MSH #include
FINSH_FUNCTION_EXPORT(wpost, Post file by URL) #endif /* FINSH_USING_MSH */
wangbo
2019-05-31
这家伙很懒,什么也没写!
服务器回应 http/1.1 404 NOT FOUND
wangbo
2019-05-31
这家伙很懒,什么也没写!
我的语法有错误?
wangbo
2019-05-31
这家伙很懒,什么也没写!
同时post请求 键值 照片上传
Cheney_Chen
2019-06-01
这家伙很懒,什么也没写!
1. webclient_header_fields_add(session, "POST %s HTTP/1.1\r\n", session->req_url) 这段的拼接不需要,webclient_header_fields_add 函数只是用来拼接头部数据的,这段属于请求行; 2. 开启 webclient 软件包 log 功能,可以查看你发送请求、接收响应的的头部信息和数据; 3.如果有条件可以尝试抓包查看收发数据确认问题。
撰写答案
登录
注册新账号
关注者
0
被浏览
1.7k
关于作者
wangbo
这家伙很懒,什么也没写!
提问
3
回答
14
被采纳
0
关注TA
发私信
相关问题
1
lwip1.4.1连接经常会断开无法连接上,可以ping通
2
LPC1768:RTT+LWIP+webserver用IE刷网页出现硬件中断错误(已经解决)
3
求一些LWIP开发的经验,目前ping一直不稳定。
4
stm32f207+dp83848无法ping通
5
RTT下的LWIP传递机制
6
rtt内lwip的socket是否是线程安全?
7
Lwip+enc28j60无法ping通
8
坑爹的rtconfig.h lwip关掉了checksum
9
花了一个晚上,把RT2.0的LWIP、网卡驱动、文件系统整合起来了,发现一点小问题
10
lwip例程中udp发送时如何指定源端口发送到指定目的地端口
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
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
组件 lwip v2.0.3 版本使用 netdev网卡的 ping 功能
2
简单两步配置RTT源码阅读环境 vsc+clangd
3
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
4
LVGL使用字库IC芯片显示中文
5
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
807
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部