1. 程式人生 > >POST請求https介面-curl獲取結果亂碼解決-curl結果為空問題-PHP

POST請求https介面-curl獲取結果亂碼解決-curl結果為空問題-PHP

 

 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格式

}