如何使用cURL在php中发布表单数据?

Kin*_*Net -1 php curl

我有以下命令,该命令使用--form /-F选项,该命令我知道它可以正常工作:

curl  --form "file=@/home/USERNAME/import.csv" https://apiprovider.com/api/v0/imports\?token\=[KEY]
Run Code Online (Sandbox Code Playgroud)

我需要通过php运行此命令,但是我遇到了麻烦,大概是表单文件数据。我尝试了以下操作,但是echo或var_dumping结果似乎什么也没显示,只是空白页或空白字符串。

<?php 
$target_url = 'https://apiprovider.com/api/v0/imports?token=[KEY]'
$file_name_with_full_path ='/home/USERNAME/import.csv';
$post = array('file'=>'@'.$file_name_with_full_path);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_VERBOSE,true);
$result=curl_exec ($ch);
curl_close ($ch);
var_dump($result);?>
Run Code Online (Sandbox Code Playgroud)

如何在PHP中使用此命令?

han*_*rik 5

由于到目前为止没有答案能正确解决(至少不能使用在php 5.6+中有效的方法),因此这里是:等效的curl_代码将是:

$ch = curl_init ( 'https://apiprovider.com/api/v0/imports?token=[KEY]' );
curl_setopt_array ( $ch, array (
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => array (
                'file' => new CURLFile ( '/home/USERNAME/import.csv' ) 
        ) 
) );
curl_exec ( $ch );
Run Code Online (Sandbox Code Playgroud)

(我也建议将CURLOPT_ENCODING设置为emptystring,特别是如果您希望响应是可压缩的,那将等同于添加--compressed到curl命令行中,并且可能会加快速度)