PHP CURL:手动设置内容长度标题

sto*_*ist 7 php curl http

假设我使用PHP,CURL上传文件:

$postData = array();

$postData['file_name'] = "test.txt";
$postData['submit'] = "UPLOAD";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData );
Run Code Online (Sandbox Code Playgroud)

现在假设我必须手动设置内容长度标头.

$headers=array(
     "POST /rest/objects HTTP/1.1",
     'accept: */*',
     "content-length: 0" //instead of 0, how could I get the length of the body from curl?
    )
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //set headers
$response = curl_exec($ch);
Run Code Online (Sandbox Code Playgroud)

我该如何测量身体的大小?(只是将filesize指定为内容长度似乎不起作用)

在另一个示例中,如果正文包含的数据不是实际文件.(由postfields手动设置)在那种情况下,我如何获得身体的内容长度?

感谢任何关于此的灯光,这似乎是一个棘手的问题.

小智 7

要获取帖子主体的长度,请尝试将字段格式化为GET样式字符串(aka param1=value1&param2=value2),然后将该字符串设置为CURL_POSTFIELDSwith curl_setopt.不必提供阵列.您可以简单地使用strlen()获取用于内容长度标头的值.

如果您要发布除其他字段之外的文件(如文中所示),则必须提供文件的值@/path/to/file,然后以字节为单位获取文件大小并将其添加到总内容中-长度.

因此,对于上面的示例,假设文件test.txt位于/test dir服务器中,则post值字符串将为file_name=@/test/text.txt&submit=UPLOAD.url_encode在将其指定为curl post值之前,您还必须使用此字符串.要获得内容长度你(编码网址后),该字符串的长度,并把它添加到文件大小/test/test.txt.