這篇文章主要介紹php中curl如何使用post,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
php curl使用post的方法:首先啟動一個CURL會話;然后對認證證書來源進行檢查;接著從證書中檢查SSL加密算法是否存在;最后以POST方式請求https協議接口即可。
本文操作環境:Windows7系統、PHP7.1版,DELL G3電腦
php curl怎么使用post方法?
PHP:CURL分別以GET、POST方式請求HTTPS/http協議接口api
curl以GET方式請求https協議接口
function curl_get_https($url){
$curl = curl_init(); // 啟動一個CURL會話
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); // 對認證證書來源的檢查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 從證書中檢查SSL加密算法是否存在
$tmpInfo = curl_exec($curl); //返回api的json對象
//關閉URL請求
curl_close($curl);
return $tmpInfo; //返回json對象
}curl以POST方式請求https協議接口
function curl_post_https($url,$data){ // 模擬提交數據函數
$curl = curl_init(); // 啟動一個CURL會話
curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 從證書中檢查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模擬用戶使用的瀏覽器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設置Referer
curl_setopt($curl, CURLOPT_POST, 1); // 發送一個常規的Post請求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的數據包
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設置超時限制防止死循環
curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 執行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);//捕抓異常
}
curl_close($curl); // 關閉CURL會話
return $tmpInfo; // 返回數據,json格式
}封裝的通用的接口
/**
* CURL GET || post請求
* @desc: GET與post都通用
* @author: Sindsun
* @email: 2361313833@qq.com
* @date: 2019年4月24日上午10:54:31
* @param: $url 請求的地址
* $isPostRequest 默認true是GET請求,否則是POST請求
* $data array 請求的參數
* $certParam array ['cert_path'] ['key_path']
* @return:
*/
function curl_http($url, $isPostRequest=false, $data=[], $header=[], $certParam=[]){ // 模擬提交數據函數
$curlObj = curl_init(); // 啟動一個CURL會話
//如果是POST請求
if( $isPostRequest ){
curl_setopt($curlObj, CURLOPT_POST, 1); // 發送一個常規的Post請求
curl_setopt($curlObj, CURLOPT_POSTFIELDS, http_build_query($data)); // Post提交的數據包
}else{ //get請求檢查是否拼接了參數,如果沒有,檢查$data是否有參數,有參數就進行拼接操作
$getParamStr = '';
if(!empty($data) && is_array($data)){
$tmpArr = [];
foreach ($data as $k=>$v){
$tmpArr[] = $k . '=' . $v;
}
$getParamStr = implode('&', $tmpArr);
}
//檢查鏈接中是否有參數
$url .= strpos($url, '?') !== false ? '&' . $getParamStr : '?' . $getParamStr;
}
curl_setopt($curlObj, CURLOPT_URL, $url); // 要訪問的地址
//檢查鏈接是否https請求
if(strpos($url, 'https') !== false){
//設置證書
if( !empty($certParam) && isset($certParam['cert_path']) && isset($certParam['key_path']) ){
curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查
curl_setopt($curlObj, CURLOPT_SSL_VERIFYHOST, 2); // 從證書中檢查SSL加密算法是否存在
//設置證書
//使用證書:cert 與 key 分別屬于兩個.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); // 對認證證書來源的檢查
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); // 使用自動跳轉
curl_setopt($curlObj, CURLOPT_AUTOREFERER, 1); // 自動設置Referer
curl_setopt($curlObj, CURLOPT_TIMEOUT, 30); // 設置超時限制防止死循環
curl_setopt($curlObj, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容
curl_setopt($curlObj, CURLOPT_HTTPHEADER, $header); //設置頭部
curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回
$result = curl_exec($curlObj); // 執行操作
if ( curl_errno($curlObj) ) {
$result = 'error: '.curl_error($curlObj);//捕抓異常
}
curl_close($curlObj); // 關閉CURL會話
return $result; // 返回數據,json格式
}說明 :前提是打開php的curl開關和服務器的ssl_module,不然不能正常使用哦。
以上是“php中curl如何使用post”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。