PHP CURL: Manually setting the content-length header

前端 未结 2 1252
北海茫月
北海茫月 2021-01-05 09:28

Say I upload a file with PHP, CURL:

$postData = array();

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

$ch = curl_init();

c         


        
相关标签:
2条回答
  • 2021-01-05 10:24

    That sounds wrong. The data generated will include sub-headers and Content-Length needs to also include those sub-headers. And since the sub-headers include a boundary, may include this and that data, this whole thing cannot work (the size cannot be specified without knowing exactly what the complete request is going to be.)

    Actually, the only one that can compute the size, from what I can see is cURL itself. But it doesn't do it 8-P

    0 讨论(0)
  • 2021-01-05 10:27

    To get the length of a post body, try formatting the fields int a GET style string (aka param1=value1&param2=value2) then setting that string as the CURL_POSTFIELDS with curl_setopt. An array does not have to be supplied. You can simply use strlen() to get the value to use for the content-length header.

    If you are posting a file (or files) in addition to other fields, as you appear to be in the example above, you have to supply the value for the file as @/path/to/file, then get the filesize in bytes and add that to the total content-length.

    So for the above example, assuming the file test.txt is in the /test dir of your server, the post value string would be file_name=@/test/text.txt&submit=UPLOAD. You MUST url_encode this string as well, before you assign it as the curl post value. To get the content length you get the length of that string (post url-encoding) and add it to the filesize of /test/test.txt.

    0 讨论(0)
提交回复
热议问题