php curl使用post的方法:首先啟動(dòng)一個(gè)CURL會(huì)話;然后對(duì)認(rèn)證證書來源進(jìn)行檢查;接著從證書中檢查SSL加密算法是否存在;最后以POST方式請求https協(xié)議接口即可。
本文操作環(huán)境:Windows7系統(tǒng)、PHP7.1版,DELL G3電腦
php curl怎么使用post方法?
PHP:CURL分別以GET、POST方式請求HTTPS/http協(xié)議接口api
-
curl以GET方式請求https協(xié)議接口
function curl_get_https($url){ $curl = curl_init(); // 啟動(dòng)一個(gè)CURL會(huì)話 curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對(duì)認(rèn)證證書來源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 從證書中檢查SSL加密算法是否存在 $tmpInfo = curl_exec($curl); //返回api的json對(duì)象 //關(guān)閉URL請求 curl_close($curl); return $tmpInfo; //返回json對(duì)象 }
-
curl以
POST
方式請求https協(xié)議接口
function curl_post_https($url,$data){ // 模擬提交數(shù)據(jù)函數(shù) $curl = curl_init(); // 啟動(dòng)一個(gè)CURL會(huì)話 curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對(duì)認(rèn)證證書來源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 從證書中檢查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模擬用戶使用的瀏覽器 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動(dòng)跳轉(zhuǎn) curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動(dòng)設(shè)置Referer curl_setopt($curl, CURLOPT_POST, 1); // 發(fā)送一個(gè)常規(guī)的Post請求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的數(shù)據(jù)包 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設(shè)置超時(shí)限制防止死循環(huán) curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區(qū)域內(nèi)容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回 $tmpInfo = curl_exec($curl); // 執(zhí)行操作 if (curl_errno($curl)) { echo 'Errno'.curl_error($curl);//捕抓異常 } curl_close($curl); // 關(guān)閉CURL會(huì)話 return $tmpInfo; // 返回?cái)?shù)據(jù),json格式 }
-
封裝的通用的接口
/** * CURL GET || post請求 * @desc: GET與post都通用 * @author: Sindsun * @email: 2361313833@qq.com * @date: 2019年4月24日上午10:54:31 * @param: $url 請求的地址 * $isPostRequest 默認(rèn)true是GET請求,否則是POST請求 * $data array 請求的參數(shù) * $certParam array ['cert_path'] ['key_path'] * @return: */ function curl_http($url, $isPostRequest=false, $data=[], $header=[], $certParam=[]){ // 模擬提交數(shù)據(jù)函數(shù) $curlObj = curl_init(); // 啟動(dòng)一個(gè)CURL會(huì)話 //如果是POST請求 if( $isPostRequest ){ curl_setopt($curlObj, CURLOPT_POST, 1); // 發(fā)送一個(gè)常規(guī)的Post請求 curl_setopt($curlObj, CURLOPT_POSTFIELDS, http_build_query($data)); // Post提交的數(shù)據(jù)包 }else{ //get請求檢查是否拼接了參數(shù),如果沒有,檢查$data是否有參數(shù),有參數(shù)就進(jìn)行拼接操作 $getParamStr = ''; if(!empty($data) && is_array($data)){ $tmpArr = []; foreach ($data as $k=>$v){ $tmpArr[] = $k . '=' . $v; } $getParamStr = implode('&', $tmpArr); } //檢查鏈接中是否有參數(shù) $url .= strpos($url, '?') !== false ? '&' . $getParamStr : '?' . $getParamStr; } curl_setopt($curlObj, CURLOPT_URL, $url); // 要訪問的地址 //檢查鏈接是否https請求 if(strpos($url, 'https') !== false){ //設(shè)置證書 if( !empty($certParam) && isset($certParam['cert_path']) && isset($certParam['key_path']) ){ curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0); // 對(duì)認(rèn)證證書來源的檢查 curl_setopt($curlObj, CURLOPT_SSL_VERIFYHOST, 2); // 從證書中檢查SSL加密算法是否存在 //設(shè)置證書 //使用證書:cert 與 key 分別屬于兩個(gè).pem文件 curl_setopt($curlObj, CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($curlObj, CURLOPT_SSLCERT, $certParam['cert_path']); curl_setopt($curlObj, CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($curlObj, CURLOPT_SSLKEY, $certParam['key_path']); }else{ curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0); // 對(duì)認(rèn)證證書來源的檢查 curl_setopt($curlObj, CURLOPT_SSL_VERIFYHOST, 0); // 從證書中檢查SSL加密算法是否存在 } } // 模擬用戶使用的瀏覽器 if(isset($_SERVER['HTTP_USER_AGENT'])){ curl_setopt($curlObj, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); } curl_setopt($curlObj, CURLOPT_FOLLOWLOCATION, 1); // 使用自動(dòng)跳轉(zhuǎn) curl_setopt($curlObj, CURLOPT_AUTOREFERER, 1); // 自動(dòng)設(shè)置Referer curl_setopt($curlObj, CURLOPT_TIMEOUT, 30); // 設(shè)置超時(shí)限制防止死循環(huán) curl_setopt($curlObj, CURLOPT_HEADER, 0); // 顯示返回的Header區(qū)域內(nèi)容 curl_setopt($curlObj, CURLOPT_HTTPHEADER, $header); //設(shè)置頭部 curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回 $result = curl_exec($curlObj); // 執(zhí)行操作 if ( curl_errno($curlObj) ) { $result = 'error: '.curl_error($curlObj);//捕抓異常 } curl_close($curlObj); // 關(guān)閉CURL會(huì)話 return $result; // 返回?cái)?shù)據(jù),json格式 }
說明 :前提是打開php的curl開關(guān)和服務(wù)器的ssl_module,不然不能正常使用哦。
推薦學(xué)習(xí):《PHP視頻教程》