程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 在PHP中使用curl_init函數的說明

在PHP中使用curl_init函數的說明

編輯:PHP綜合
復制代碼 代碼如下:
$ch = curl_init();
$c_url = 'http://www.baidu.com';
$c_url_data = "product_&type=".$type."";
curl_setopt($ch, CURLOPT_URL,$c_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $c_url_data);
echo $result = curl_exec($ch);
curl_close ($ch);
unset($ch);

在PHP中使用Curl
Posted 09月 14th, 2008 歸屬於PHP
原文(英文)地址: http://www.phpit.net/article/using-curl-php 版權聲明:署名-非商業性使用-禁止演繹 2.0
摘要:
在這篇文章中主要講解php_curl庫的知識,並教你如何更好的使用php_curl。
簡介
你可能在你的編寫PHP腳本代碼中會遇到這樣的問題:怎麼樣才能從其他站點獲取內容呢?這裡有幾個解決方式;最簡單的就是在php中使用fopen()函數,但是fopen函數沒有足夠的參數來使用,比如當你想構建一個“網絡爬蟲”,想定義爬蟲的客戶端描述(IE,firefox),通過不同的請求方式來獲取內容,比如POST,GET;等等這些需求是不可能用fopen()函數實現的。
為了解決我們上面提出的問題,我們可以使用PHP的擴展庫-Curl,這個擴展庫通常是默認在安裝包中的,你可以它來獲取其他站點的內容,也可以來干別的。
備注:這兩段代碼需要php_curl擴展庫的支持,查看phpinfo(),如果curl support enabled則表示支持curl庫。
1、Windows下的PHP開啟curl庫支持:
打開php.ini,將extension=php_curl.dll前的;號去掉。
2、Linux下的PHP開啟curl庫支持:
編譯PHP時在./configure後加上 –with-curl
在這篇文章中,我們一起來看看如何使用curl庫,並看看它的其他用處,但是接下來,我們要從最基本的用法開始
基本用法:
第一步,我們通過函數curl_init()創建一個新的curl會話,代碼如下:
// create a new curl resource
$ch = curl_init();
?>
我們已經成功創建了一個curl會話,如果需要獲取一個URL的內容,那麼接下的一步,傳遞一個URL給curl_setopt()函數,代碼:
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”);
?>
做完上一步工作,curl的准備工作做完了,curl將會獲取URL站點的內容,並打印出來。代碼:
// grab URL and pass it to the browser
curl_exec($ch);
?>
最後,關閉當前的curl會話
//close curl resource, and free up system resources
curl_close($ch);
?>
下面我們來看看完成的實例代碼:
復制代碼 代碼如下:
// create a new curl resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”);
// grab URL and pass it to the browser
curl_exec($ch);
// close curl resource, and free up system resources
curl_close($ch);
?>

我們剛剛把另外一個站點的內容,獲取過來以後自動輸出到浏覽器,我們有沒有其他的方式組織獲取的信息,然後控制其輸出的內容呢?完全沒有問題,在curl_setopt()函數的參數中,如果希望獲得內容但不輸出,使用 CURLOPT_RETURNTRANSFER參數,並設為非0值/true!,完整代碼請看:
復制代碼 代碼如下:
// create a new curl resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL, and return output
$output = curl_exec($ch);
// close curl resource, and free up system resources
curl_close($ch);
// Replace ‘Google' with ‘PHPit'
$output = str_replace('Google', ‘PHPit', $output);
// Print output
echo $output;
?>

在上面的2個實例中,你可能注意到通過設置函數curl_setopt()的不同參數,可以獲得不同結果,這正是curl強大的原因,下面我們來看看這些參數的含義。
CURL的相關選項:
如果你看過php手冊中的curl_setopt()函數,你可以注意到了,它下面長長的參數列表,我們不可能一一介紹,更多的內容請查看PHP手冊,這裡只介紹常用的和有的一些參數。
第一個很有意思的參數是 CURLOPT_FOLLOWLOCATION ,當你把這個參數設置為true時,curl會根據任何重定向命令更深層次的獲取轉向路徑,舉個例子:當你嘗試獲取一個PHP的頁面,然後這個PHP的頁面中有一段跳轉代碼 ,curl將從http://new_url獲取內容,而不是返回跳轉代碼。完整的代碼如下:
復制代碼 代碼如下:
// create a new curl resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// grab URL, and print
curl_exec($ch);
?>

如果Google發送一個轉向請求,上面的例子將根據跳轉的網址繼續獲取內容,和這個參數有關的兩個選項是CURLOPT_MAXREDIRS和CURLOPT_AUTOREFERER .
參數CURLOPT_MAXREDIRS選項允許你定義跳轉請求的最大次數,超過了這個次數將不再獲取其內容。如果CURLOPT_AUTOREFERER 設置為true時,curl會自動添加Referer header在每一個跳轉鏈接,可能它不是很重要,但是在一定的案例中卻非常的有用。
下一步介紹的參數是CURLOPT_POST,這是一個非常有用的功能,因為它可以讓您這樣做POST請求,而不是GET請求,這實際上意味著你可以提交
其他形式的頁面,無須其實在表單中填入。下面的例子表明我的意思:
復制代碼 代碼如下:
// create a new curl resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL,”http://projects/phpit/content/using%20curl%20php/demos/handle_form.php”);
// Do a POST
$data = array('name' => ‘Dennis', 'surname' => ‘Pallett');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// grab URL, and print
curl_exec($ch);
?>
And the handle_form.php file:
echo ‘Form variables I received:';
echo ‘';
print_r ($_POST);
echo ‘';
?>

正如你可以看到,這使得它真的很容易提交形式,這是一個偉大的方式來測試您的所有形式,而不以填補他們在所有的時間。
參數CURLOPT_CONNECTTIMEOUT 通常用來設置curl嘗試請求鏈接的時間,這是一個非常重要的選項,如果你把這段時間設置的太短了,可能會導致curl請求失敗。
但是如果你把它設置的時間太長了,可能PHP腳本將死掉。和這個參數相關的一個選項是 CURLOPT_TIMEOUT,這是用來設置curl允許執行的時間需求。如果您設置這一個很小的值,它可能會導下載的網頁上是不完整的,因為他們需要一段時間才能下載。
最後一個選項是 CURLOPT_USERAGENT,它允許你自定義請求是的客戶端名稱,比如webspilder或是IE6.0.示例代碼如下:
復制代碼 代碼如下:
// create a new curl resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://sc.jb51.net/”);
curl_setopt($ch, CURLOPT_USERAGENT, ‘My custom web spider/0.1′);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// grab URL, and print
curl_exec($ch);
?>

現在我們把最有意思的一個參數都介紹過了,下面我們來介紹一個curl_getinfo() 函數,看看它能為我們做些什麼。
獲取頁面的信息:
函數curl_getinfo()可以使得我們獲取接受頁面各種信息,你能編輯這些信息通過設定選項的第二個參數,你也可以傳遞一個數組的形式。就像下面的例子:
復制代碼 代碼如下:
// create a new curl resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.google.com”);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FILETIME, true);
// grab URL
$output = curl_exec($ch);
// Print info
echo ‘';
print_r (curl_getinfo($ch));
echo ‘';
?>

大部分返回的信息是請求本身的,像:這個請求花的時間,返回的頭文件信息,當然也有一些頁面的信息,像頁面內容的大小,最後修改的時間。
那些全是關於curl_getinfo()函數的,現在讓我們看看它的實際用途。
實際用途:
curl庫的第一用途可以查看一個URL頁面是否存在,我們可以通過查看這個URL的請求返回的代碼來判斷比如404代表這個頁面不存在,我們來看一些例子:
復制代碼 代碼如下:
// create a new curl resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.google.com/does/not/exist”);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL
$output = curl_exec($ch);
// Get response code
$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// Not found?
if ($response_code == ‘404′) {
echo ‘Page doesn\'t exist';
} else {
echo $output;
}
?>

其他的用戶可能是創建一個自動檢查器,驗證每個請求的頁面是否存在。
我們可以用curl庫來寫和google類似的網頁蜘蛛(web spider),或是其他的網頁蜘蛛。這篇文章不是關於如何寫一個網頁蜘蛛的,因此所以我們沒有講任何關於網頁蜘蛛的細節問題,但是以後在PHPit 將會介紹用 curl來構造一個web spider.
結論:
在這篇文章我已經表明,如何使用php中的curl庫和其大部分的選項。
為最基本的任務,只想獲得一個網頁,你可能不會需要CURL庫,但是,一旦你想要做任何事情稍微先進的,您可能會想要使用curl庫。
在近未來,我會告訴您究竟如何建立自己的網絡蜘蛛,類似Google的網絡蜘蛛,敬請期待,以phpit。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved