1. 程式人生 > >CURL模擬post,get提交資料-實際應用

CURL模擬post,get提交資料-實際應用

CURL是什麼?

CURL是一個非常強大的開源庫,支援很多協議,包括HTTP、FTP、TELNET等,我們使用它來發送HTTP請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的HTTP協議引數,並且支援HTTPS。
怎麼使用?

使用CURL的PHP擴充套件完成一個HTTP請求的傳送一般有以下幾個步驟:

1、初始化連線控制代碼;
2、設定CURL選項;
3、執行並獲取結果;
4、釋放VURL連線控制代碼;

舉個例子:

我要從本地一個自己寫的接口裡獲取今天是陰曆(農曆)是什麼?(僅公參考)

<?php
error_reporting(0
); require ('rili.class.php'); header('Content-Type:text/html; charset=utf-8'); function rili(){ $date = $_GET['date']; $date = explode('-',$date); $y = $date[0]; $m = $date[1]; $d = $date[2]; $test=new Calendar(); $Year=$test->Cal($y,$m,$d); $year = json_encode($Year
); echo $year; } rili(); ?>

用CURL模擬get請求資料:

<?php
header("Content-type: text/html; charset=utf-8");
$date = date("Y-m-d",time());
$url="http://localhost:8080/rili/index.php/rili?date=$date";
//呼叫方法
$res = getCurl($url);
//列印資料
var_dump(get_object_vars(json_decode($res)));

/**
 * curl模擬get提交資料
 * @param
[type] $url 請求的url * @return [type] 返回的資料 */
function getCurl($url) { //初始化 $curl = curl_init(); //設定抓取的url curl_setopt($curl, CURLOPT_URL, $url); //設定標頭檔案的資訊作為資料流輸出 curl_setopt($curl, CURLOPT_HEADER, 1); //設定獲取的資訊以檔案流的形式返回,而不是直接輸出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //顯示返回的Header區域內容 curl_setopt($curl, CURLOPT_HEADER, 0); //執行命令 $data = curl_exec($curl); //關閉URL請求 curl_close($curl); //返回資料 return $data; } ?>

結果是:
這裡寫圖片描述
在百度對了一下結果,是正確的。
對了,還有post呢?
下面順便附上CURL模擬post提交資料的程式碼:

<?php
/**
 * curl模擬post提交
 * @param  [type] $url  請求的url
 * @param  [type] $data 請求提交的資料
 * @return [type]       返回的資料
 */
    function postCurl($url,$data){ // 模擬提交資料函式
        // 啟動一個CURL會話
        $curl = curl_init();
        // 要訪問的地址
        curl_setopt($curl, CURLOPT_URL, $url);
        // 對認證證書來源的檢查
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1);
        // 從證書中檢查SSL加密演算法是否存在
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
        // 模擬使用者使用的瀏覽器
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        // 使用自動跳轉
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        // 自動設定Referer
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
        // 傳送一個常規的Post請求
        curl_setopt($curl, CURLOPT_POST, 1);
        // Post提交的資料包
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        // 設定超時限制防止死迴圈
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        // 顯示返回的Header區域內容
        curl_setopt($curl, CURLOPT_HEADER, 0);
        // 獲取的資訊以檔案流的形式返回
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        // 執行操作
        $tmpInfo = curl_exec($curl);
        if (curl_errno($curl)) {
           echo 'Errno'.curl_error($curl);//捕抓異常
        }
        // 關閉CURL會話
        curl_close($curl);
        // 返回資料
        return $tmpInfo;
    }
?>

注意:

傳送GET請求的關鍵是拼裝格式正確的URL,請求地址和GET資料由一個”?”分割,然後GET變數的名稱和值用”=”分隔,各個GET名稱和值由“&”連線。