PHP CURL: Manually setting the content-length header

前端 未结 2 1254
北海茫月
北海茫月 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:27

    To get the length of a post body, try formatting the fields int a GET style string (aka param1=value1¶m2=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.

提交回复
热议问题