1. 程式人生 > >cURL 簡介及大體使用方法

cURL 簡介及大體使用方法

cURL操作步驟解析

         客戶端: 初始化curl    ->    向伺服器傳送請求    ->    接收伺服器資料    ->    關閉curl

                         curl_init()                 傳送和接收之間是靠curl_exec()執行             curl_close()

示例一、最簡單的網頁爬蟲

<?php
    $curl=curl_init("http://www.baidu.com"); # 初始化
    curl_exec($curl);	# 執行
    curl_close($curl);	# 關閉curl	
?>

        繼示例一的新需求:用cURL抓取網頁資訊並替換部分內容(將百度 替換為 ‘阿里巴巴’)

$curlobj = curl_init();	#初始化
curl_setopt($curlobj, CURLOPT_URL, "http://www.baidu.com");	#設定訪問網頁的URL地址
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);	#執行之後不用直接打印出來
$output = curl_exec($curlobj);	# 執行
curl_close($curlobj);	# 關閉 curl
// echo str_replace("百度", "阿里巴巴", $output);	#替換
// echo str_replace("新聞", "阿里巴巴", $output);	#替換
echo str_replace("地圖", "阿里巴巴", $output);	#替換   

示例二、用cURL獲取天氣資訊

$data = "theCityName=蘭州";	# 多個地址用 & 符號即可
$curlobj =curl_init();
curl_setopt($curlobj, CURLOPT_URL, "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName");	# 獲取的路徑
curl_setopt($curlobj, CURLOPT_HEADER, 0);	
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 	# 解決為將物件引用設定到物件的例項問題
curl_setopt($curlobj, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36');	  # 解決為將物件引用設定到物件的例項問題
curl_setopt($curlobj, CURLOPT_POST, 1);
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded;charset=utf8","Content-length:".strlen($data)));	# 設定編碼格式 長度
$rtn = curl_exec($curlobj);
if (!curl_errno($curlobj)) {
echo $rtn;
} else {
echo 'Curl 錯誤:'.curl_error($curlobj);
}
curl_close($curlobj); 

示例三、用cURL訪問 https 資源       

/**
*	程式碼例項 -PHP-cURL實戰
*	例項描述:下載網路上面的一個HTTPS的資源
*/
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, "https://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.js");	# 設定訪問的頁面
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);	#執行之後不打印出來
date_default_timezone_set('PRC');	# 使用Cookie時,必須先設時區
curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, 0);	# 終止伺服器端進行驗證
$output = curl_exec($curlobj);
curl_close($curlobj);
echo $output;

示例四、用cURL模擬登入後獲取資料

$data = 'username=賬號&password=密碼&remember=1';
$curlobj = curl_init();	# 初始化
curl_setopt($curlobj, CURLOPT_URL, "登入地址URL");# 設定訪問網頁的URL
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);	# 執行之後不直接打印出來


// Cookie 相關設定,這部分設定需要在所有的會話開始之前就設定
date_default_timezone_set('PRC');	# 使用cookie時 必須先設定時區
curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curlobj, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curlobj, CURLOPT_COOKIESESSION, true);
curl_setopt($curlobj, CURLOPT_COOKIEFILE, "cookiefile");
curl_setopt($curlobj, CURLOPT_COOKIEJAR, "cookiefile");
curl_setopt($curlobj, CURLOPT_COOKIE, session_name() . '=' . session_id());
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_FOLLOWLOCATION, 1);	#能夠讓cURL支援餓頁面連結跳轉


curl_setopt($curlobj, CURLOPT_POST, 1);
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded; charset=utf-8","Content-length: ".strlen($data)));


curl_exec($curlobj);	# 執行
curl_setopt($curlobj, CURLOPT_URL, "開啟登陸之後的頁面");
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("Content-type:text/xml"));


$output=curl_exec($curlobj);
curl_close($curlobj);
echo $output;

示例五、用 cURL 從 FTP 上下載檔案到本地

/**
*	程式碼例項 -PHP-cURL實戰
*	例項描述:從 FTP 伺服器上下載一個檔案到本地
*   
*/  
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, "ftp://ftp伺服器的訪問地址");
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlobj, CURLOPT_TIMEOUT, 300); //timeout 300s
curl_setopt($curlobj, CURLOPT_USERPWD, "peter.zhou:123456"); // FTP使用者名稱:密碼
//set up the output file;
curl_setopt($curlobj, CURLOPT_FILE, $outfile);


$rtn = curl_exec($curlobj);
fclose($outfile);
if (!curl_errno($curlobj)) {
    // $info = curl_getinfo($curlobj);
    // print_r($info);
    echo "RETURN: ".$rtn;
}else{
    echo 'Curl error :'.curl_error($curlobj);
}

示例六、用cURL 從本地上傳檔案到 FTP

/**
*	程式碼例項 -PHP-cURL實戰
*	例項描述:用cURL 從本地上傳檔案到 FTP
*   
*/


$curlobj = curl_init();
$localfile = 'ftp01.php';
$fp = fopen($localfile, 'r');

curl_setopt($curlobj, CURLOPT_URL, "ftp://ftp伺服器的訪問地址/ftp01_upload_01.php");
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlobj, CURLOPT_TIMEOUT, 300); //timeout 300s
curl_setopt($curlobj, CURLOPT_USERPWD, "peter.zhou:123456"); // FTP使用者名稱:密碼
//set up the output file;


curl_setopt($curlobj, CURLOPT_UPLOAD, 1);	# 執行上傳操作    是
curl_setopt($curlobj, CURLOPT_INFILE, $fp);	# 上傳的檔案
curl_setopt($curlobj, CURLOPT_INFILESIZE, filesize($localfile)); #反饋 ftp 所傳檔案大小


curl_setopt($curlobj, CURLOPT_FILE, $outfile);


$rtn = curl_exec($curlobj);
fclose($fp);
if (!curl_errno($curlobj)) {
    // $info = curl_getinfo($curlobj);
    // print_r($info);
    echo "上傳檔案 成功!";
}else{
    echo 'Curl error :'.curl_error($curlobj);
}

大致的使用方法就有這幾種 具體的其他行為,請參照 http://www.php.net/manual/zh/book.curl.php 官方文件