[PHP自動化-進階]003.CURL處理Https請求訪問

引言:繼前文《模擬登陸並採集數據》,《模擬登陸帶有驗證碼的網站》,你們對CURL基本上已經有了認識,這一講簡單的說一下請求Https。php

在不少的站點,如TalkingData, BaiDu等等,一些請求協議都是走SSL,大白話來講就是Https,這種協議在模擬CURL時可能會出現請求不成功等等的問題。html

下面爲你們講一下解決方案。算法

這一講很簡單,但能說明問題……。api

 

異常提示
curl


大多數異常信息提示以下:證書驗證失敗。post

SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 網站

 

切入主題ui


解決方法,在curl請求時,加入加密

// 跳過證書檢查  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// 從證書中檢查SSL加密算法是否存在  
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  

 

 curl https post請求封裝代碼代碼url

<?php
/** curl 獲取 https 請求
* @param String $url        請求的url
* @param Array  $data       要發送的數據
* @param Array  $header     請求時發送的header
* @param int    $timeout    超時時間,默認30s
*/
function curl_https($url, $data=array(), $header=array(), $timeout=30){

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳過證書檢查
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 從證書中檢查SSL加密算法是否存在
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

    $response = curl_exec($ch);

    if($error=curl_error($ch)){
        die($error);
    }

    curl_close($ch);

    return $response;

}

// 調用
$url = 'https://www.example.com/api/message.php';
$data = array('name'=>'fdipzone');
$header = array();

$response = curl_https($url, $data, $header, 5);

echo $response;
?>

 

未完待續……。

 

 

 

本站文章爲 寶寶巴士 SD.Team 原創,轉載務必在明顯處註明:(做者官方網站: 寶寶巴士 
轉載自【寶寶巴士SuperDo團隊】 原文連接: http://www.cnblogs.com/superdo/p/4792496.html

相關文章
相關標籤/搜索