我試圖了解 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。
添加回答
舉報
0/150
提交
取消
