cURL 簡介及大體使用方法
阿新 • • 發佈:2018-12-21
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);
}