您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
php(5.3.29nts)使用curl以formdata上传文件
发布时间:2020-06-21 09:40:02编辑:雪饮阅读()
Php的curl语法在php中自我感觉只是比正则稍微优雅些,而这次介绍的则是更加不优雅的语法,虽然不优雅但在某些时候实用性很强。
一般我们用curl就是传递一些少量数据,而在某些情况或许还会用到文件上传,没错,我们的php此时作为客户端我们要上传文件给另外一个接口。如
public function buildMultiPartRequest($ch, $boundary, $fields, $files,$token)
{
$delimiter = '-------------' . $boundary;
$data = '';
foreach ($fields as $name => $content) {
$data .= "--" . $delimiter . "\r\n"
. 'Content-Disposition: form-data; name="' . $name . "\"\r\n\r\n"
. $content . "\r\n";
}
//modify it
foreach ($files as $key => $val) {
$data .= "--" . $delimiter . "\r\n"
. 'Content-Disposition: form-data; name="' . $val["name"] . '"; filename="' . $val['fileName'] . '"' . "\r\n\r\n"
. $val['fileContent'] . "\r\n";
}
$data .= "--" . $delimiter . "--\r\n";
curl_setopt_array($ch, array(
CURLOPT_POST => TRUE,
CURLOPT_HTTPHEADER => array_merge(array(
'Content-Type: multipart/form-data; boundary=' . $delimiter,
'Content-Length: ' . strlen($data),
'accept:application/json',
'Authorization:Bearer '.$token
)),
CURLOPT_POSTFIELDS => $data
));
return $ch;
}
public function postFormData($url,$postData,$files,$token){
$ch = curl_init($url);
$ch = $this->buildMultiPartRequest($ch, uniqid(),$postData,$files,$token );//modify it, here
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
if(substr($url, 0, 5) == 'https') {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //SSL 报错时使用
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //SSL 报错时使用
}
try {
$content = curl_exec($ch); //执行并存储结果
$a=curl_getinfo($ch);
$this->_log($a,0);
} catch (\Exception $e) {
$this->_log($e->getMessage(),1);
}
$curlError = curl_error($ch);
if(!empty($curlError)) {
$this->_log($curlError,1);
}
curl_close($ch);
return $content;
}
public function sendMessageToGroup(){
$message=array();
if(isset($_POST["Message"])){
$message["Message"]=$_POST["Message"];
}
$Attachments=array();
if(isset($_POST["Attachments"])){
foreach($_POST["Attachments"] as $key=>$val){
$fullFilePath=$_SERVER["DOCUMENT_ROOT"]."/attachs/cache/".$val;
$tmp=array("name"=>"Attachments","fileName"=>$val,"fileContent"=>file_get_contents($fullFilePath));
array_push($Attachments,$tmp);
}
}
$response=$this->postFormData($this->apiUrl."/Group/".$_POST["groupId"]."/Messages",$message,$Attachments,$_POST["AccessToken"]);
if(empty($response)){
$this->msgbox->add($this->curlError,1)->json();
}
if(isset($_POST["Attachments"])){
$fullFilePath=$_SERVER["DOCUMENT_ROOT"]."/attachs/cache/".$val;
@unlink($fullFilePath);
}
$this->msgbox->json($this->letsgoContent($response));
}
关键字词:php,curl,formdata,上传文件,5.3