为了账号安全,请及时绑定邮箱和手机立即绑定

通过java套接字使用HTTP协议上传文件

通过java套接字使用HTTP协议上传文件

元芳怎么了 2021-10-28 09:16:49
我试图了解 HTTP 协议的工作原理,因此我尝试手动将标头添加到 java Socket 以向 httpbin.org 发送请求,如下所示:        BufferedWriter wr = new BufferedWriter(/*socket Outputstream*/)             wr.write("POST post HTTP/1.1\r\n");        wr.write("Host: httpbin.org\r\n");        wr.write("Accept: */*\r\n");        wr.write("Content-Length: "+data.length()+"\r\n");        wr.write("Content-Type: multipart/form-data; boundary=---WebKitFormBoundary67\r\n");        wr.write("\r\n");         wr.write(data);         wr.flush();在上面的代码中data是 HTTP 请求的有效负载,如下所示:   ---WebKitFormBoundary67   Content-Disposition: form-data; name="field1"   value1   ---WebKitFormBoundary67   Content-Disposition: form-data; name="field2"; filename="example.txt"   Java is better when it run long   ---WebKitFormBoundary67--但是服务器 httpbin.org 没有识别任何附加的文件,我错过了什么吗?
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

multipart/form-data是RFC 2046 中定义的多部分 MIME 消息。消息示例中多部分 MIME 消息的基本结构multipart/form-data如下所示:


Content-type:  multipart/form-data; boundary=foo


--foo

Content-Disposition: form-data; name=key1


abcde

--foo

Content-Disposition: form-data; name=key2; filename=foo.txt


01234

--foo--

如您所见,边界foo在边界属性中定义,用作部件之间的分隔符,--foo用作最终边界--foo--。


相反,您的代码将边界定义为 not asfoo但 as--foo然后尝试仍仅用--foo作各部分之间的分隔符。要更正您的代码,您需要将边界设置为 only-WebKitFormBoundary67而不是---WebKitFormBoundary67,或者-----WebKitFormBoundary67用作分隔符而不是 only ---WebKitFormBoundary67。



查看完整回答
反对 回复 2021-10-28
  • 1 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信