OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9800|回复: 27

stm32 lwip 如何访问网页下载文件

[复制链接]

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-2-12
在线时间
9 小时
发表于 2016-2-1 10:29:30 | 显示全部楼层 |阅读模式
10金钱
请教大神,现在用stm32f107实现了tcp客户端,并可以与服务器实时通信,但是现在有一个访问网页下载升级文件的需求,想问下是用http 客服端来实现吗???有没有已经实现的方案?还请赐教。

最佳答案

查看完整内容[请看2#楼]

用HFS建立一个本地服务器, POST /net_device/auth.htm HTTP/1.1 Host: apipublic.ihealthlabs.eu User_Agent: NetDevice-HS6 Content-Type: application/x-www-form-urlencoded Connection: close Content-Length:486 研究研究这些
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2016-2-1 10:29:31 | 显示全部楼层
用HFS建立一个本地服务器,
POST /net_device/auth.htm HTTP/1.1
Host: apipublic.ihealthlabs.eu
User_Agent: NetDevice-HS6
Content-Type: application/x-www-form-urlencoded
Connection: close
Content-Length:486

研究研究这些
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-2-1 11:21:07 | 显示全部楼层
没搞过,帮顶
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-2-12
在线时间
9 小时
 楼主| 发表于 2016-2-1 12:52:24 | 显示全部楼层

谢过原子哥
回复

使用道具 举报

3

主题

400

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1746
金钱
1746
注册时间
2015-6-11
在线时间
308 小时
发表于 2016-2-1 13:09:16 | 显示全部楼层
http://www.cnblogs.com/zc110747/p/4668245.html
之前做的服务器在线升级的,你可以参考下
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-2-12
在线时间
9 小时
 楼主| 发表于 2016-2-1 13:43:12 | 显示全部楼层
zc123 发表于 2016-2-1 13:09
http://www.cnblogs.com/zc110747/p/4668245.html
之前做的服务器在线升级的,你可以参考下

前辈这个是以stm32作为http server来实现的吧,我想知道stm32作为tcpclient能否实现下载升级文件??还请不吝赐教。
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-2-12
在线时间
9 小时
 楼主| 发表于 2016-2-1 15:30:15 | 显示全部楼层
yklstudent 发表于 2016-2-1 14:10
客户端连接服务器端下载文件到本地(TF卡、U盘等),然后校验文件是否完整,然后就IAP升级;
关键这个需要服 ...

需要服务器如何配合呢,如果是文件一段一段的传输,那是没有问题的,我想知道的是stm32作为客户端直接去下载服务端的文件,比如给定一个网址,浏览器直接访问的话会直接下载,然而stm32 如何去访问这个网址之后下载这个文件??
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-2-12
在线时间
9 小时
 楼主| 发表于 2016-2-3 09:23:42 | 显示全部楼层
顶一下
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2016-2-3 09:55:19 | 显示全部楼层
fangchenyi 发表于 2016-2-1 15:30
需要服务器如何配合呢,如果是文件一段一段的传输,那是没有问题的,我想知道的是stm32作为客户端直接去 ...

断点续传,用http 请求去做,
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-2-12
在线时间
9 小时
 楼主| 发表于 2016-2-3 13:44:43 | 显示全部楼层
象牙塔 发表于 2016-2-3 09:55
断点续传,用http 请求去做,

大神能否指导一下如何发送http请求,我用网络调试助手连接百度发送get请求,什么都收不到。。。
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-2-12
在线时间
9 小时
 楼主| 发表于 2016-2-3 15:22:22 | 显示全部楼层
象牙塔 发表于 2016-2-3 14:01
用HFS建立一个本地服务器,
POST /net_device/auth.htm HTTP/1.1
Host: apipublic.ihealthlabs.eu

好的= =感谢!
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-2-12
在线时间
9 小时
 楼主| 发表于 2016-2-5 08:23:11 | 显示全部楼层
象牙塔 发表于 2016-2-1 10:29
用HFS建立一个本地服务器,
POST /net_device/auth.htm HTTP/1.1
Host: apipublic.ihealthlabs.eu

请求到服务器的文件了,关于断点续传大神有何指示么?
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2016-2-16 08:37:33 | 显示全部楼层
post属性里设置一下需要下载的字节比如0-1024,不要太大,
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

70

主题

6698

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12692
金钱
12692
注册时间
2012-11-26
在线时间
3711 小时
发表于 2016-2-16 08:41:48 | 显示全部楼层
象牙塔 发表于 2016-2-16 08:37
post属性里设置一下需要下载的字节比如0-1024,不要太大,

牛人啊,mark下,以后也许用得到
学无止境
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-9-3 09:40:50 | 显示全部楼层
象牙塔 发表于 2016-2-1 10:29
用HFS建立一个本地服务器,
POST /net_device/auth.htm HTTP/1.1
Host: apipublic.ihealthlabs.eu

有代码吗?高人
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-9-3 14:53:05 | 显示全部楼层
fangchenyi 发表于 2016-2-5 08:23
请求到服务器的文件了,关于断点续传大神有何指示么?

你是怎么请求到的。能指点一下吗
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-9-3 16:42:09 | 显示全部楼层
本帖最后由 pjzmj2012 于 2020-9-3 17:17 编辑
象牙塔 发表于 2016-2-16 08:37
post属性里设置一下需要下载的字节比如0-1024,不要太大,

请问get、post怎么设置下载字节啊是Content-Length:486吗?我设置了怎么不起作用
试了Range:bytes=0-499也不对
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2020-9-3 20:10:57 | 显示全部楼层
pjzmj2012 发表于 2020-9-3 16:42
请问get、post怎么设置下载字节啊是Content-Length:486吗?我设置了怎么不起作用
试了Range:bytes=0-499 ...

#define SEND_DATA "POST /virtualserver/STM32F107LwIPUart.bin HTTP/1.1\r\nHost:192.168.95.95:80\r\nUser-Agent: MyBrowser\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 0\r\nRange: bytes=0-2047\r\nConnection: KeepAlive\r\n\r\n"
#define GET_INFORMATION "POST /virtualserver/Information.bin HTTP/1.1\r\nHost:192.168.95.95:80\r\nUser-Agent: MyBrowser\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: KeepAlive\r\n\r\n"
#define SEND_DATA_TAIL "\r\nConnection: KeepAlive\r\n\r\n"//

// #define SSL_SERVER_NAME "EuGateWay.iHealthLabs.com"
//  #define SSL_SERVER_NAME "api.ihealthlabs.com" /* Server address */
#ifdef USE_DNS
        #define SSL_SERVER_NAME "EuGateWay.iHealthLabs.com"
//         #define SSL_SERVER_NAME "www.baidu.com"
// // #define SSL_SERVER_NAME "192.168.95.95"
#else
        #define SSL_SERVER_NAME "192.168.95.95"
#endif

#define TCP_TASK_PRIO   ( tskIDLE_PRIORITY + 4 )  

/**********************************************/

        struct SendCmd Cmdstruct;
        char SEND_DATA_HEAD[250] = "POST /virtualserver/STM32F107LwIPUart.bin HTTP/1.1\r\nHost:192.168.95.95:80\r\nUser-Agent: MyBrowser\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 0\r\nRange: bytes=";
        char SEND_DATA_NUM[50] = {0};
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2020-9-3 20:11:41 | 显示全部楼层
#define SEND_DATA "POST /virtualserver/STM32F107LwIPUart.bin HTTP/1.1\r\nHost:192.168.95.95:80\r\nUser-Agent: MyBrowser\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 0\r\nRange: bytes=0-2047\r\nConnection: KeepAlive\r\n\r\n"
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2020-9-3 20:12:17 | 显示全部楼层
象牙塔 发表于 2020-9-3 20:11
#define SEND_DATA "POST /virtualserver/STM32F107LwIPUart.bin HTTP/1.1\r\nHost:192.168.95.95:80\r\nUs ...

逻辑自己设计,这是请求的命令
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2020-9-3 20:12:40 | 显示全部楼层
象牙塔 发表于 2020-9-3 20:12
逻辑自己设计,这是请求的命令

0-2047数据。。。。。
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2020-9-3 20:13:47 | 显示全部楼层
两个重要函数直接调用
  1. int BIN_currentlen_left ( char * recv_data )
  2. {
  3.         int  len ;
  4.         char data_buf[60];/*缓存*/
  5.         char cache_buf[20];/*缓存*/
  6.         /*1、在接收到服务器的数据后,查找"Content-Range: bytes"字段,并返回数据地址*/
  7.         /*2、在接收到服务器的数据后,查找"\r\n"字段,并返回数据地址*/
  8.         /*3、获取长度*/
  9.         len = strstr(strstr(recv_data,"Content-Range: bytes"),"\r\n") - strstr(recv_data,"Content-Range: bytes");
  10.         /*4、减去 "Content-Range: bytes"字段的长度,即为我们需要获取字段的长度 */
  11.         /*5、对字段分割,一般获取数据格式为0-2048/6540*/
  12.         /*6、用strstr函数,获得”/6540“字段,之后地址加一,字符转换即可*/
  13.         strncpy(data_buf, strstr(recv_data,"Content-Range: bytes")+strlen("Content-Range: bytes"),len-strlen("Content-Range: bytes"));
  14.         /*7、0-2048/6540 其中0 = 拷贝 0-2048/6540,长度为len 减去-2048/6540字段*/
  15.         strncpy(cache_buf, data_buf,len-strlen(strstr(data_buf,"-")));         
  16.         return          atoi(cache_buf);  
  17. }
  18. int BIN_currentlen_right ( char * recv_data )
  19. {
  20.         int  len ;
  21.         char data_buf[60];/*缓存*/
  22.         char cache_buf[20];/*缓存*/
  23.         /*1、在接收到服务器的数据后,查找"Content-Range: bytes"字段,并返回数据地址*/
  24.         /*2、在接收到服务器的数据后,查找"\r\n"字段,并返回数据地址*/
  25.         /*3、获取长度*/
  26.         len = strstr(strstr(recv_data,"Content-Range: bytes"),"\r\n") - strstr(recv_data,"Content-Range: bytes");
  27.         /*4、减去 "Content-Range: bytes"字段的长度,即为我们需要获取字段的长度 */
  28.         /*5、对字段分割,一般获取数据格式为0-2048/6540*/
  29.         /*6、用strstr函数,获得”/6540“字段,之后地址加一,字符转换即可*/
  30.         strncpy(data_buf, strstr(recv_data,"Content-Range: bytes")+strlen("Content-Range: bytes"),len-strlen("Content-Range: bytes"));
  31.         /*7、0-2048/6540 其中0 = 拷贝 0-2048/6540,长度为len 减去-2048/6540字段*/
  32.         strncpy(cache_buf, strstr(data_buf,"-")+1,strlen(strstr(data_buf,"-")) - strlen(strstr(data_buf,"/")));         
  33.         return          atoi(cache_buf);  
  34. }
复制代码

纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-9-4 08:42:11 | 显示全部楼层
本帖最后由 pjzmj2012 于 2020-9-4 15:47 编辑
象牙塔 发表于 2020-9-3 20:11
#define SEND_DATA "POST /virtualserver/STM32F107LwIPUart.bin HTTP/1.1\r\nHost:192.168.95.95:80\r\nUs ...

不知道这张图片怎么编辑不掉。
捕获.JPG
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2020-9-4 20:26:01 | 显示全部楼层
pjzmj2012 发表于 2020-9-4 08:42
不知道这张图片怎么编辑不掉。

你这个图不已经下载下来了么
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2020-9-4 20:27:09 | 显示全部楼层
pjzmj2012 发表于 2020-9-4 08:42
不知道这张图片怎么编辑不掉。

hex显示就是2048个字节数据,可比较下
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-9-5 11:18:05 | 显示全部楼层
本帖最后由 pjzmj2012 于 2020-9-5 17:14 编辑
象牙塔 发表于 2020-9-4 20:27
hex显示就是2048个字节数据,可比较下

请问校验怎么做呢,hfs有校验功能吗?现在发现烧录的数据有些地方不对每次出错的地方还不一样。

发现用jflash去读stm32的flash,每次读出来的文件都不一样,晕菜了,这是怎么回事,难道硬件有问题吗?
回复

使用道具 举报

93

主题

745

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1843
金钱
1843
注册时间
2012-9-16
在线时间
285 小时
发表于 2020-9-6 09:30:57 | 显示全部楼层
pjzmj2012 发表于 2020-9-5 11:18
请问校验怎么做呢,hfs有校验功能吗?现在发现烧录的数据有些地方不对每次出错的地方还不一样。

发现 ...

HFS这个是测试的,你要是改校验的话,自己写服务器吧,还有http下载成功,基本不会错,如果你烧写失败,检验错误,应该是别的地方出错了,
或者你可以在bin文件最后四个字节加校验码,读取最后四字节判断
纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-9-6 17:23:55 | 显示全部楼层
象牙塔 发表于 2020-9-6 09:30
HFS这个是测试的,你要是改校验的话,自己写服务器吧,还有http下载成功,基本不会错,如果你烧写失败, ...

感谢你的热心回复。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 14:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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