五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > 在PHP中使用curl_init函數(shù)的用法

在PHP中使用curl_init函數(shù)的用法

文章來(lái)源:365jz.com     點(diǎn)擊數(shù):208    更新時(shí)間:2017-08-04 18:08   參與評(píng)論
 
$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 版權(quán)聲明:署名-非商業(yè)性使用-禁止演繹 2.0
摘要:
在這篇文章中主要講解php_curl庫(kù)的知識(shí),并教你如何更好的使用php_curl。
簡(jiǎn)介
你可能在你的編寫PHP腳本代碼中會(huì)遇到這樣的問(wèn)題:怎么樣才能從其他站點(diǎn)獲取內(nèi)容呢?這里有幾個(gè)解決方式;最簡(jiǎn)單的就是在php中使用fopen()函數(shù),但是fopen函數(shù)沒(méi)有足夠的參數(shù)來(lái)使用,比如當(dāng)你想構(gòu)建一個(gè)“網(wǎng)絡(luò)爬蟲”,想定義爬蟲的客戶端描述(IE,firefox),通過(guò)不同的請(qǐng)求方式來(lái)獲取內(nèi)容,比如POST,GET;等等這些需求是不可能用fopen()函數(shù)實(shí)現(xiàn)的。
為了解決我們上面提出的問(wèn)題,我們可以使用PHP的擴(kuò)展庫(kù)-Curl,這個(gè)擴(kuò)展庫(kù)通常是默認(rèn)在安裝包中的,你可以它來(lái)獲取其他站點(diǎn)的內(nèi)容,也可以來(lái)干別的。
備注:這兩段代碼需要php_curl擴(kuò)展庫(kù)的支持,查看phpinfo(),如果curl support enabled則表示支持curl庫(kù)。
1、Windows下的PHP開啟curl庫(kù)支持:
打開php.ini,將extension=php_curl.dll前的;號(hào)去掉。
2、Linux下的PHP開啟curl庫(kù)支持:
編譯PHP時(shí)在./configure后加上 –with-curl
在這篇文章中,我們一起來(lái)看看如何使用curl庫(kù),并看看它的其他用處,但是接下來(lái),我們要從最基本的用法開始
基本用法:
第一步,我們通過(guò)函數(shù)curl_init()創(chuàng)建一個(gè)新的curl會(huì)話,代碼如下:
// create a new curl resource
$ch = curl_init();
?>
我們已經(jīng)成功創(chuàng)建了一個(gè)curl會(huì)話,如果需要獲取一個(gè)URL的內(nèi)容,那么接下的一步,傳遞一個(gè)URL給curl_setopt()函數(shù),代碼:
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”);
?>
做完上一步工作,curl的準(zhǔn)備工作做完了,curl將會(huì)獲取URL站點(diǎn)的內(nèi)容,并打印出來(lái)。代碼:
// grab URL and pass it to the browser
curl_exec($ch);
?>
最后,關(guān)閉當(dāng)前的curl會(huì)話
//close curl resource, and free up system resources
curl_close($ch);
?>
下面我們來(lái)看看完成的實(shí)例代碼:
 
// 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); 
?> 

我們剛剛把另外一個(gè)站點(diǎn)的內(nèi)容,獲取過(guò)來(lái)以后自動(dòng)輸出到瀏覽器,我們有沒(méi)有其他的方式組織獲取的信息,然后控制其輸出的內(nèi)容呢?完全沒(méi)有問(wèn)題,在curl_setopt()函數(shù)的參數(shù)中,如果希望獲得內(nèi)容但不輸出,使用 CURLOPT_RETURNTRANSFER參數(shù),并設(shè)為非0值/true!,完整代碼請(qǐng)看:
 
// 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個(gè)實(shí)例中,你可能注意到通過(guò)設(shè)置函數(shù)curl_setopt()的不同參數(shù),可以獲得不同結(jié)果,這正是curl強(qiáng)大的原因,下面我們來(lái)看看這些參數(shù)的含義。
CURL的相關(guān)選項(xiàng):
如果你看過(guò)php手冊(cè)中的curl_setopt()函數(shù),你可以注意到了,它下面長(zhǎng)長(zhǎng)的參數(shù)列表,我們不可能一一介紹,更多的內(nèi)容請(qǐng)查看PHP手冊(cè),這里只介紹常用的和有的一些參數(shù)。
第一個(gè)很有意思的參數(shù)是 CURLOPT_FOLLOWLOCATION ,當(dāng)你把這個(gè)參數(shù)設(shè)置為true時(shí),curl會(huì)根據(jù)任何重定向命令更深層次的獲取轉(zhuǎn)向路徑,舉個(gè)例子:當(dāng)你嘗試獲取一個(gè)PHP的頁(yè)面,然后這個(gè)PHP的頁(yè)面中有一段跳轉(zhuǎn)代碼 ,curl將從http://new_url獲取內(nèi)容,而不是返回跳轉(zhuǎn)代碼。完整的代碼如下:
 
// 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發(fā)送一個(gè)轉(zhuǎn)向請(qǐng)求,上面的例子將根據(jù)跳轉(zhuǎn)的網(wǎng)址繼續(xù)獲取內(nèi)容,和這個(gè)參數(shù)有關(guān)的兩個(gè)選項(xiàng)是CURLOPT_MAXREDIRS和CURLOPT_AUTOREFERER .
參數(shù)CURLOPT_MAXREDIRS選項(xiàng)允許你定義跳轉(zhuǎn)請(qǐng)求的最大次數(shù),超過(guò)了這個(gè)次數(shù)將不再獲取其內(nèi)容。如果CURLOPT_AUTOREFERER 設(shè)置為true時(shí),curl會(huì)自動(dòng)添加Referer header在每一個(gè)跳轉(zhuǎn)鏈接,可能它不是很重要,但是在一定的案例中卻非常的有用。
下一步介紹的參數(shù)是CURLOPT_POST,這是一個(gè)非常有用的功能,因?yàn)樗梢宰屇@樣做POST請(qǐng)求,而不是GET請(qǐng)求,這實(shí)際上意味著你可以提交
其他形式的頁(yè)面,無(wú)須其實(shí)在表單中填入。下面的例子表明我的意思:
 
// 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 ‘'; 
?> 

正如你可以看到,這使得它真的很容易提交形式,這是一個(gè)偉大的方式來(lái)測(cè)試您的所有形式,而不以填補(bǔ)他們?cè)谒械臅r(shí)間。
參數(shù)CURLOPT_CONNECTTIMEOUT 通常用來(lái)設(shè)置curl嘗試請(qǐng)求鏈接的時(shí)間,這是一個(gè)非常重要的選項(xiàng),如果你把這段時(shí)間設(shè)置的太短了,可能會(huì)導(dǎo)致curl請(qǐng)求失敗。
但是如果你把它設(shè)置的時(shí)間太長(zhǎng)了,可能PHP腳本將死掉。和這個(gè)參數(shù)相關(guān)的一個(gè)選項(xiàng)是 CURLOPT_TIMEOUT,這是用來(lái)設(shè)置curl允許執(zhí)行的時(shí)間需求。如果您設(shè)置這一個(gè)很小的值,它可能會(huì)導(dǎo)下載的網(wǎng)頁(yè)上是不完整的,因?yàn)樗麄冃枰欢螘r(shí)間才能下載。
最后一個(gè)選項(xiàng)是 CURLOPT_USERAGENT,它允許你自定義請(qǐng)求是的客戶端名稱,比如webspilder或是IE6.0.示例代碼如下:
 
// create a new curl resource 
$ch = curl_init(); 
// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, “http://sc.365jz.com/”); 
curl_setopt($ch, CURLOPT_USERAGENT, ‘My custom web spider/0.1′); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
// grab URL, and print 
curl_exec($ch); 
?> 

現(xiàn)在我們把最有意思的一個(gè)參數(shù)都介紹過(guò)了,下面我們來(lái)介紹一個(gè)curl_getinfo() 函數(shù),看看它能為我們做些什么。
獲取頁(yè)面的信息:
函數(shù)curl_getinfo()可以使得我們獲取接受頁(yè)面各種信息,你能編輯這些信息通過(guò)設(shè)定選項(xiàng)的第二個(gè)參數(shù),你也可以傳遞一個(gè)數(shù)組的形式。就像下面的例子:
 
// 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 ‘'; 
?> 

大部分返回的信息是請(qǐng)求本身的,像:這個(gè)請(qǐng)求花的時(shí)間,返回的頭文件信息,當(dāng)然也有一些頁(yè)面的信息,像頁(yè)面內(nèi)容的大小,最后修改的時(shí)間。
那些全是關(guān)于curl_getinfo()函數(shù)的,現(xiàn)在讓我們看看它的實(shí)際用途。
實(shí)際用途:
curl庫(kù)的第一用途可以查看一個(gè)URL頁(yè)面是否存在,我們可以通過(guò)查看這個(gè)URL的請(qǐng)求返回的代碼來(lái)判斷比如404代表這個(gè)頁(yè)面不存在,我們來(lái)看一些例子:
 
// 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; 
} 
?> 

其他的用戶可能是創(chuàng)建一個(gè)自動(dòng)檢查器,驗(yàn)證每個(gè)請(qǐng)求的頁(yè)面是否存在。
我們可以用curl庫(kù)來(lái)寫和google類似的網(wǎng)頁(yè)蜘蛛(web spider),或是其他的網(wǎng)頁(yè)蜘蛛。這篇文章不是關(guān)于如何寫一個(gè)網(wǎng)頁(yè)蜘蛛的,因此所以我們沒(méi)有講任何關(guān)于網(wǎng)頁(yè)蜘蛛的細(xì)節(jié)問(wèn)題,但是以后在PHPit 將會(huì)介紹用 curl來(lái)構(gòu)造一個(gè)web spider.
結(jié)論:
在這篇文章我已經(jīng)表明,如何使用php中的curl庫(kù)和其大部分的選項(xiàng)。
為最基本的任務(wù),只想獲得一個(gè)網(wǎng)頁(yè),你可能不會(huì)需要CURL庫(kù),但是,一旦你想要做任何事情稍微先進(jìn)的,您可能會(huì)想要使用curl庫(kù)。
在近未來(lái),我會(huì)告訴您究竟如何建立自己的網(wǎng)絡(luò)蜘蛛,類似Google的網(wǎng)絡(luò)蜘蛛,敬請(qǐng)期待,以phpit。

如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇

您可能感興趣的文章:

發(fā)表評(píng)論 (208人查看,0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)