gpt4 book ai didi

java - 通过java套接字使用HTTP协议(protocol)上传文件

转载 作者:可可西里 更新时间:2023-11-01 17:04:47 28 4
gpt4 key购买 nike

我想了解 HTTP 协议(protocol)的工作原理,所以我尝试手动将 header 添加到 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 没有识别任何附加文件,我是不是遗漏了什么?

最佳答案

multipart/form-dataRFC 2046 中定义的多部分 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 在 boundary 属性中定义,用作 --foo 部分之间的分隔符,并用作最终边界作为 --foo--

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

关于java - 通过java套接字使用HTTP协议(protocol)上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52655265/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com