【问题标题】:How to use PHP/Curl to post a file to restful api?如何使用 PHP/Curl 将文件发布到 restful api?
【发布时间】:2016-02-23 01:55:40
【问题描述】:

我正在尝试使用 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)
);

【问题讨论】:

    标签: php curl pipedrive-api


    【解决方案1】:
    1. 在使用之前,您需要在脚本顶部设置$params 变量。这对你没有好处。

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

    具体来说,你应该像这样设置相关的文件选项:

    // 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 尚未初始化。

    【讨论】:

    • 谢谢。我没有正确传递文件。当我合并 CURLFile() 类时,它工作得很好。 $params 数组在另一个类中定义并传递给我的 curl 包装器。我应该把它放在上面,很抱歉造成混乱。
    猜你喜欢
    • 2019-07-25
    • 2019-11-07
    • 1970-01-01
    • 2016-06-01
    • 2010-10-23
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多