【发布时间】:2014-12-26 23:22:07
【问题描述】:
我有一个问题,我需要在 PHP 中使用 curl 设置 Content-Length 标头以发出 multipart/form-data POST HTTP 请求。
例如,我有一个 PHP 脚本,它通过 curl POST 将图像上传到服务器,请求的 HTTP 实体正文的内容如下所示:
------Boundary123
Content-Disposition: form-data; name="files[]"; filename="image.png"
Content-Type: image/png
... contents of image.png
------Boundary123--
我会这样做:
$bodiEntity = "--".$boundary."\r\n".
'Content-Disposition: form-data; name="files[]"; filename="'.$fileName.'"'."\r\n".
'Content-Type: img/png'."\r\n\r\n".
file_get_contents($fileName)."\r\n". // binary contents of file
"--".$boundary."--\r\n";
但是,我应该为 Content-Length 标头设置哪个值?我知道,它是实体体的字节数,但是我应该如何处理“\r\n”呢?
我的意思是,如果我这样做 strlen("\r\n") 我得到 2 作为返回值,但我想在处理发送 multipart/form-data 时它应该是 1(意思是)一个字节,对吗?
所以我应该只使用strlen() 来处理边界字符串、Content-Disposition、Content-Type 等字符串,并将 "\r\n" 计数为单个字符,并使用filesize() 来获取文件的文件大小字节,然后将所有值相加以获得 Content-Length 标头的最终值?还是我应该像 PHP 一样将 "\r\n" 计为 2 个字符?
感谢关注!
【问题讨论】:
-
cURL不是自动为你做的吗? -
我不知道,是吗?
标签: php curl multipartform-data content-length