我正在开发一个将“自制” HTTP传输发送到我的网页的应用程序。
"POST /file.php HTTP/1.0\r\n"
"Host: xxxx.com\r\n"
"Content-type: multipart/form-data; boundary=\"Abcdefghijklmnopqrstuvwxyz\"\r\n"
"Content-Length:163\r\n"
"\r\n"
"--Abcdefghijklmnopqrstuvwxyz\r\n"
"Content-Disposition: form-data; name=\"file\"; filename=\"myfile.txt\"; content-Type:text/plain\r\n"
"\r\n"
"test"
"--Abcdefghijklmnopqrstuvwxyz--\r\n"
"\r\n"
这是我的HTTP POST请求。似乎很好,但是当我执行请求并得到响应时,PHP脚本文件在文件“ 3”上指示错误。 意思是“ UPLOAD_ERR_PARTIAL”,但我不知道为什么它指示这样的消息。有效负载长度与Content-Length值匹配。
你能帮我吗? 谢谢。
答案 0 :(得分:1)
您的POST请求的问题是边界语法中缺少一个CRLF。
multipart / form-data在RFC7578中定义 Section 4.1中对边界语法的描述如下:
与其他多部分类型一样,这些部分用 边界定界符,使用CRLF,“-”和 “边界”参数。
让我们检查一下您当前的POST请求。
POST /file.php HTTP/1.0
Host: xxxx.com
Content-type: multipart/form-data; boundary="Abcdefghijklmnopqrstuvwxyz"
Content-Length: 163
--Abcdefghijklmnopqrstuvwxyz
Content-Disposition: form-data; name="file"; filename="myfile.txt"; content-Type:text/plain
test--Abcdefghijklmnopqrstuvwxyz--
根据规范,最后一行应为两行。 在每个边界之前必须始终有一个CRLF和-,以便最后一行应如下所示:
test
--Abcdefghijklmnopqrstuvwxyz--
因此可接受的POST请求是这样的:
POST /file.php HTTP/1.0
Host: xxxx.com
Content-type: multipart/form-data; boundary="Abcdefghijklmnopqrstuvwxyz"
Content-Length: 165
--Abcdefghijklmnopqrstuvwxyz
Content-Disposition: form-data; name="file"; filename="myfile.txt"; content-Type:text/plain
test
--Abcdefghijklmnopqrstuvwxyz--
我之所以称其为“可接受”,是因为实际上还有另一个错误,但这是次要的。 我的服务器只是忽略了小错误,并毫无问题地接受了请求。