$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函式庫的知識,並教你如何更好的使用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會話,代碼如下:
<?php // create a new curl resource $ch = curl_init(); ?>
我們已經成功創建了一個curl會話,如果需要獲取一個URL的內容,那麼接下的一步,傳遞一個URL給curl_setopt()函數,代碼:
<?php // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”); ?>
做完上一步工作,curl的準備工作做完了,curl將會獲取URL站點的內容,並列印出來。程式碼:
<?php // grab URL and pass it to the browser curl_exec($ch); ?>
最後,關閉目前的curl會話
<?php //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); ?>
我們剛剛把另外一個站點的內容,過來過來
// 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; ?>
// 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); ?>
如果你看過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://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_POST,這是一個非常有用的功能,因為它可以讓您這樣做POST請求,而不是GET請求,這實際上意味著你可以提交
其他形式的頁面,無須其實在表單中填入。下面的例子表明我的意思:
// 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); ?>
// 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。
更多在PHP中使用curl_init函数的说明相关文章请关注PHP中文网!