POST請求https介面-curl獲取結果亂碼解決-curl結果為空問題-PHP
阿新 • • 發佈:2018-12-06
curl獲取結果亂碼的解決方法:
HTML響應頭沒有設定,就自行設定,有些不用設定響應頭內容,但還是有亂碼
這樣就要解釋內容:
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
curl結果為空問題解決方法:
如果是https協議使用結果為空,如下這樣可以解決:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);// 對認證證書來源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);// 從證書中檢查SSL加密演算法是否存在
有些要加上快取:
curl_setopt($curl, CURLOPT_COOKIEFILE,$GLOBALS ['cookie_file']);// 讀取上面所儲存的Cookie資訊
curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['cookie_file']);// 存放Cookie資訊的檔名稱
程式碼如下(自行測試):
<?PHP $data['name']='name'; $data['sex']='男'; $url='https://api.xxxxx.com/push/pushAll'; $huawei_res=post_curls($url,$data); $huawei_res=json_decode($huawei_res,true); /** * [post_curls POST請求https介面返回內容] * @param [string] $url [請求的URL地址] * @param [string] $post [請求的引數] * @return [string] [JSON資料] */ function post_curls($url, $post){ $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_REFERER, $ref); // 手動設定referer curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設定Referer curl_setopt($curl, CURLOPT_POST, 1); // 傳送一個常規的Post請求 curl_setopt($curl, CURLOPT_POSTFIELDS, $post); // Post提交的資料包 curl_setopt($curl, CURLOPT_COOKIEFILE,$GLOBALS ['cookie_file']);// 讀取上面所儲存的Cookie資訊 curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['cookie_file']);// 存放Cookie資訊的檔名稱 // curl_setopt($curl, CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip, deflate','accept-charset:utf-8','content-type:application/json'));//設定HTTP頭欄位 curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');// 解釋gzip內容 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定超時限制防止死迴圈 curl_setopt($curl, CURLOPT_HEADER, 0);// 顯示返回的Header區域內容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的資訊以檔案流的形式返回 curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10);// 在發起連線前等待的時間,如果設定為0,則無限等待。 $res = curl_exec($curl); // 執行操作 if (curl_errno($curl)) { echo 'Errno'.curl_error($curl);// 捕抓異常 } curl_close($curl); // 關閉CURL會話 return $res; // 返回資料,json格式 }