通过HTTP协议模拟Form提交的数举包构造

包由Header和Body构造成,Header记录了一些相关的数据,大同小异,唯一的一个需要注意的是Content-length字段标志了Body段的长度。在网上搜索到一段老外的代码,是全部转换为字符串后的处理代码,经实验后无法针对Binary文件提交,改写为Byte后可正常提交。

在Header中需要定义个分割符,可用32位UUID或者任意不可能与文件产生冲突的字符串作为分隔符

Body数据类格式类似如下

--boundaryboundary\r\n
Content-Description:form-data;name="theName"(\r\n)
\r\n
value\r\n
Body文件类协议如下

Content-Description:form-data;name="fileName";filename="thefilerealname"\r\n
Content-Type:application/octet-stream\r\n
[the file binary]
--boundaryboundary--\n
每个Body段开头由Boundary开头,最前面要有“--",在数据体结束的时候,末尾要有"--"再加一个\n字符
将整个Body转换为Byte流,计算出长度,赋值给Header的Content-Length,再将Header转化为Byte流,与Body进行结合,最后通过Winsock提交到指定的服务端处理程序。

你可能感兴趣的:(http协议)