PHP之curl

 當我第一次接觸curl的時候,看文檔,以及網上search各種資料,官方(https://cn2.php.net/manual/en/intro.curl.php)的解釋是,這是某大牛寫的一個libcurl庫,PHP支持該擴展庫,允許我們以各種不同的協議(http、https、ftp、telnet、file…)訪問各種不同的伺服器,支持post、put、ftp或基於表單的文件上傳,支持cookie、代理等等。

 

     好像還是似懂非懂,我覺得最簡單的解釋是,curl是一個工具集,由libcurl擴展庫支持,包含一些函數,使用這些函數可以模擬我們來訪問某些地址,也就是,我們手動在瀏覽器地址欄裡面輸入https://www.baidu.com,來訪問百度,curl就可以代替這種手動操作,以程式的形式來實現這一過程,這個操作、過程得到的結果,是瀏覽器給瞭我們一個百度搜索的首頁。

 

     既然curl是一個工具集,有很多函數可供調用,可以想象成,在地址欄輸入URL(可能會帶一些參數),當輸入完點擊回車的時候,相當於調用瞭某些函數,這些函數在百度某臺或某幾臺伺服器上的腳本上寫著,函數運行完後會有某種效果,比如返回瞭值,或者沒返回值,或者打印瞭一些東西,在這裡呈現瞭一個頁面給你,而curl能實現的功能,比簡單展示一個頁面多得多,這些各自不同的功能是通過curl_setopt函數來實現的。比如在接SDK的時候,別人提供的是訪問地址形式的API,這時curl就大顯身手。

 

     1.get實現

 

復制代碼

<?php

    $url = 'https://www.somesite.com';

    $data = array('username'=>'Peter', 'password'=>12345);

    function get($url, $data = array()){

        $ch = curl_init();   // 初始化一個curl資源類型變量

        

        /*設置訪問的選項*/

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  // 啟用時會將伺服器伺服器返回的Location: 放在header中遞歸的返回給伺服器

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );  // 將獲得的數據返回而不是直接在頁面上輸出

        curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP );  // 設置訪問地址用的協議類型為HTTP        

        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);  // 訪問的超時時間限制為15s

        $url = url.'?'.http_build_query($data);  

        curl_setopt($ch, CURLOPT_URL, $url);  // 設置即將訪問的URL

 

        $result = curl_exec($ch);  // 執行本次訪問,返回一個結果

        // …                     // 針對結果的正確與否做一些操作

        return $result;

    }

    // $result = get(%url, $data);  // 調用

復制代碼

      2.post實現

 

復制代碼

<?php

    function post($url, $data = array()){

        $ch = curl_init(); 

          

        curl_setopt($ch, CURLOPT_POST, true);  // 設置為post傳遞形式

        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  // 設置post傳遞的數據

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  // 設置數據以文件流的形式返回

        curl_setopt($ch, CURLOPT_USERAGENT, '');  // 將用戶代理置空

        curl_setopt($ch, CURLOPT_HEADER, false);  // 設置不顯示頭信息

          

        $result = curl_exec($ch);

        $info = curl_getinfo($ch);   // 獲取本次訪問資源的相關信息

          

        return $result;

    }   

發佈留言