解决C语言实现https、http提交multipart/form-data但是服务器无法解析的问题

一.背景

项目中用C语言实现一个客户端,通过http或https向服务器提交multipart/form-data类型的数据。

二.问题

数据提交后服务器只返回响应头,没有响应实体内容,经和后端研发沟通,得知是后端服务没有解析出form-data数据。

三.解决方法

1。使用postman测试,可以收到正常响应数据。

2。逐字节比对C程序提交内容和postman提交内容,发现boundary字段有差异,

例:

POST /testpath HTTP/1.1
Host: server_ip_or_dns
Content-Type: multipart/form-data; boundary=--------------------------193309464164257718226442
Content-Length: N
----------------------------193309464164257718226442
Content-Disposition: form-data; name="ID"
 
00110011
----------------------------193309464164257718226442--
 
这里有2处值得注意的地方,
(1)Content-Type: multipart/form-data; boundary=--------------------------193309464164257718226442行比
----------------------------193309464164257718226442行的 “-”个数少2个;多的这两个“-”暂且理解为“开始标志”吧。
 
(2)Content-Disposition: form-data; name="ID"行,Content-Disposition:和form-data;之间必须加空格。同时,
 form-data;和name="ID"之间必须加空格。
 
其实,(1)和(2)的内容都在《RFC 1867》有所体现的,只怪没仔细看。囧。。。
 
posted @ 2022-06-09 16:01  彭城老朽  阅读(731)  评论(0编辑  收藏  举报