首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过java套接字使用HTTP协议上传文件

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

Stack Overflow用户
提问于 2018-10-05 05:17:15
回答 1查看 466关注 0票数 1

我正在尝试理解HTTP协议是如何工作的,所以我尝试手动向java套接字添加头部,以便向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没有识别任何附加的文件,我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-05 05:39:45

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

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--用作最终边界。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52655265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档