dpvv37755 2009-12-16 18:50
浏览 98
已采纳

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

Say I upload a file with 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 );

Now assume I have to manually set the content-length header.

$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);

How would I measure the size of the body? (just specifying the filesize as content length doesn't seem to work)

In another example what if the body contains data that is not an actual file. (manually set by postfields) In that situation how would I get the content length of the body?

Thanks for any light shed on this, it appears to be a tough issue.

  • 写回答

2条回答 默认 最新

  • douwendu2460 2009-12-16 22:39
    关注

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能