HTTP POST查询如何计算内容长度

新手上路,请多包涵

我正在对服务器进行 HTTP POST 查询,并手动创建帖子正文。我想我在内容长度标头上犯了一些错误,因为在服务器端,当我一开始收到 http 响应时,我看到带有 http 响应 200 的标头,然后在我的 php 脚本中打印发布参数和文件名我得到了正确的值,但还有一些垃圾字节。这是我的 http 帖子的正文:

 StringBuffer str = new StringBuffer();
str.append("POST /tst/query.php HTTP/1.1\r\n"
        + "Host: myhost.com\r\n"
        + "User-Agent: sampleAgent\r\n"
        + "Content-type: multipart/form-data, boundary=AaB03x\r\n"
        + "Content-Length: 172\r\n\r\n"
        + "--AaB03x\r\n"
        + "content-disposition: form-data; name=\"asd\"\r\n\r\n123\r\n--AaB03x\r\n"
        + "content-disposition: form-data; name=\"pics\"; filename=\"file1.txt\"\r\n"
        + "Content-Type: text/plain\r\n\r\n555\r\n"
        + "--AaB03x--"
);

这是服务器的输出(忽略 [0.0] - 它来自我打印结果的控制台)

 [0.0] HTTP/1.1 200 OK

[0.0] Date: Sat, 10 Dec 2011 11:53:11 GMT

[0.0] Server: Apache

[0.0] Transfer-Encoding: chunked

[0.0] Content-Type: text/html

[0.0]

[0.0] 6

[0.0] Array
[0.0]

[0.0] 2

[0.0] (
[0.0]

[0.0] 1

[0.0]

[0.0] 1

[0.0]

[0.0] 1

[0.0]

[0.0] 1

[0.0]

[0.0] 1

[0.0] [

[0.0] 3

[0.0] asd

[0.0] 5

[0.0] ] =>

3
123
1
2
)
0

服务器上的 php 脚本就像你能想到的一样简单:

 <?php
    print_r($_POST) ;
?>

原文由 gop 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 685
2 个回答
String boundary = "AaB03x";
String body = "--" + boundary + "\r\n"
            + "Content-Disposition: form-data; name=\"asd\"\r\n"
            + "\r\n"
            + "123\r\n"
            + "--" + boundary + "\r\n"
            + "Content-Disposition: form-data; name=\"pics\"; filename=\"file1.txt\"\r\n"
            + "Content-Type: text/plain\r\n"
            + "\r\n"
            + "555\r\n"
            + "--" + boundary + "--";

StringBuffer str = new StringBuffer();
str.append("POST /tst/query.php HTTP/1.1\r\n"
         + "Host: myhost.com\r\n"
         + "User-Agent: sampleAgent\r\n"
         + "Content-type: multipart/form-data, boundary=\"" + boundary + "\"\r\n"
         + "Content-Length: " + body.length() + "\r\n"
         + "\r\n"
         + body
);

…我想说的是应该做的方式

原文由 DaveRandom 发布,翻译遵循 CC BY-SA 3.0 许可协议

来自 HTTP RFC ( RFC2626, 14.3 )

Content-Length entity-header 字段指示发送给接收者的实体主体的大小,以十进制的 OCTET 数表示,或者在 HEAD 方法的情况下,实体主体的大小将被发送请求是 GET。

换句话说,你应该计算字节数( octets ),因此 \r\n 应该被认为是2个八位字节/字节。

原文由 Filip Roséen - refp 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题