1. 程式人生 > >PHP之CURL

PHP之CURL

一、什麼是CURL

CURL是一個功能強大的庫,可以讓我們與各種的伺服器使用各種型別的協議進行連線和通訊。支援http、https、ftp、gopher、telnet、dict、file和ldap協議。同時也支援HTTPS認證、HTTP POST、HTTP PUT、 FTP 上傳(這個也能通過PHP的FTP擴充套件完成)、HTTP 基於表單的上傳、代理、cookies和使用者名稱+密碼的認證。

二、使用CURL傳送請求的基本流程

  1. curl_init()  初始化連線控制代碼;
  2. curl_setopt()  設定CURL選項;
  3. curl_exec()  執行請求;
  4. curl_close()  釋放VURL連線控制代碼。

三、使用CURL傳送get/post請求

<?php
    /**
    *當$data為null時是get方式,否則為post方式
    */
     public function phpCurl($url, $data = null)
	 {
		$curl = curl_init();
		curl_setopt($curl, CURLOPT_URL, $url);
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
		if (!empty($data)){
			curl_setopt($curl, CURLOPT_POST, 1);
			curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
		}
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		$output = curl_exec($curl);
		curl_close($curl);
		return $output;
	 }


    //get方式。注意:這裡的$url已經包含引數了,不帶引數你自己處理哦GET很簡單
    function curl_get_https($url)
    {
        $curl = curl_init(); // 啟動一個CURL會話
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳過證書檢查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);  // 從證書中檢查SSL加密演算法是否存在
        $tmpInfo = curl_exec($curl);     //返回api的json物件
        //關閉URL請求
        curl_close($curl);
        return $tmpInfo;    //返回json物件
    }

    /* PHP CURL HTTPS POST */
    function curl_post_https($url,$data)
    { // 模擬提交資料函式
        $curl = curl_init(); // 啟動一個CURL會話
        curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從證書中檢查SSL加密演算法是否存在
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模擬使用者使用的瀏覽器
        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, 30); // 設定超時限制防止死迴圈
        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; // 返回資料,json格式
    }


?>