我有以下命令,该命令使用--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中使用此命令?
由于到目前为止没有答案能正确解决(至少不能使用在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命令行中,并且可能会加快速度)