如何使用PHP/Curl到post一个文件到restfulapi?
How to use PHP/Curl to post a file to restful api?
我正在尝试使用 PHP/Curl 从我的网站 post 头像图像到 pipedrive。文档需要 multipart/form-data 编码。我似乎无法将实际文件获取到 post。我已经尝试了几种方法来从各种操作方法发送文件,但每次都是 pipedrive returns "no file attached"。我在下面粘贴了我当前的尝试,有什么想法吗?或者也许只是给我指出一个可行的例子?
$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)
);
您需要在脚本顶部设置 $params
变量,然后再使用它。在底部对你没有好处。
阅读 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
还没有被初始化。
我正在尝试使用 PHP/Curl 从我的网站 post 头像图像到 pipedrive。文档需要 multipart/form-data 编码。我似乎无法将实际文件获取到 post。我已经尝试了几种方法来从各种操作方法发送文件,但每次都是 pipedrive returns "no file attached"。我在下面粘贴了我当前的尝试,有什么想法吗?或者也许只是给我指出一个可行的例子?
$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)
);
您需要在脚本顶部设置
$params
变量,然后再使用它。在底部对你没有好处。阅读 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
还没有被初始化。