如何使用PHP / Curl将文件发布到restful api?

时间:2016-02-23 01:55:41

标签: php curl pipedrive-api

我正在尝试使用PHP / Curl将我的网站上的头像图片发布到pipedrive。文档需要多部分/表单数据编码。我似乎无法获得要发布的实际文件。我已经尝试了几种方法从各种方法发送文件,但每次pipedrive返回“没有附加文件”。我已经粘贴了我目前的尝试,任何想法?或者或许只是指出一个可行的例子?

$ch = curl_init();
$timeout = 10;
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_INFILESIZE, $params['filesize']);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER,
   array('Content-Type:multipart/form-data')
);
$data = curl_exec($ch);

$params = array(
    'id' => $PDid,
    'file' => plugin_dir_path( dirname( __FILE__ )).'tmp/'.$filename,
    'filesize' => filesize(plugin_dir_path( dirname( __FILE__ )).'tmp/'.$filename)
);

1 个答案:

答案 0 :(得分:1)

  1. 在使用脚本之前,需要在脚本顶部设置$params变量。你不擅长底层。

  2. 阅读CURLFile的文档并按照示例进行操作。

  3. 具体来说,您应该设置相关的文件选项:

    // Create a CURLFile object
    $cfile = new CURLFile('cats.jpg','image/jpeg','test_name');
    
    // Assign POST data
    $params = array('test_file' => $cfile);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    

    在您发布的代码中,您似乎缺少CURLOPT_POST。并且您的CURLOPT_POSTFIELDS无效,因为正如我所说$params尚未初始化。