1. 程式人生 > >PHP + curl 實現 http 或 https 抓取資料:

PHP + curl 實現 http 或 https 抓取資料:

/**
* 抓取資料  https 或 http 形式
* @param $url    連結 
* @param $data   引數
* @return mixed  返回資料
*/
private function curlS($url, $data)
{
   $UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
        $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, $UserAgent/*$_SERVER['HTTP_USER_AGENT']*/); // 模擬使用者使用的瀏覽器

        if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) {

            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

        }
        //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, 200); // 設定超時限制防止死迴圈
        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; // 返回資料
    }