在PHP中使用curl_init函數的說明_PHP教程

來源:互聯網
上載者:User
複製代碼 代碼如下:
$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。

http://www.bkjia.com/PHPjc/322663.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/322663.htmlTechArticle複製代碼 代碼如下: $ch = curl_init(); $c_url = 'http://www.baidu.com'; $c_url_data = "product_ curl_setopt($ch, CURLOPT_URL,$c_url); curl_setopt($ch, CURLOPT_POST, 1); curl...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.