国产精品成人VA在线观看,亚洲日韩在线中文字幕综合,亚洲AV电影天堂男人的天堂,久久人人爽人人爽人人av东京热

News新聞

業(yè)界新聞動(dòng)態(tài)、技術(shù)前沿
Who are we?

您的位置:首頁(yè)      樂(lè)道系統(tǒng)FAQ      PHP對(duì)CURL函數(shù)的使用

PHP對(duì)CURL函數(shù)的使用

標(biāo)簽: 發(fā)布日期:2014-03-17 00:00:00 729

PHP在LINUX上可以利用CURL程序進(jìn)行一些http的交互,甚至包括網(wǎng)站登錄,POST請(qǐng)求等。當(dāng)然要求系統(tǒng)帶CURL,其次版本還要7以上,具體可參考手冊(cè)。

首先看下最簡(jiǎn)單的獲取一個(gè)HTTP頁(yè)面的寫法:

 


$url = "http://www.163.com"//以163為例
$session = curl_init($url);

curl_exec(
$session);

if (curl_errno($session))  //出錯(cuò)處理
    echo curl_error($session);
curl_close(
$session);

 

功能就是GET 163的主頁(yè)。然后更進(jìn)一步,使用curl_setopt函數(shù)做些調(diào)整。

然后看個(gè)復(fù)雜點(diǎn)的,作用是登錄網(wǎng)站。

 


$url = "http://www.abc.com/login.php";
$postargs = "name=jack&password=123456";

$session = curl_init($url);
    
//設(shè)置postargs參數(shù),就POST出去

curl_setopt(
$session, CURLOPT_POST, true);
curl_setopt(
$session, CURLOPT_POSTFIELDS, $postargs);


//是否返回header信息,一般可用于檢查http返回狀態(tài)值
curl_setopt($session, CURLOPT_HEADER, true);

//使用cookie,可以用于登錄操作,注意需要對(duì)應(yīng)的目錄權(quán)限
curl_setopt($session,CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt(
$session,CURLOPT_COOKIEJAR, "cookie.txt");

//將返回結(jié)果寫入變量
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($session);

if (curl_errno($session)) {
    
echo curl_error($session);
}

curl_close(
$session);

//輸出結(jié)果,在這之后可以相應(yīng)的parse自己需要的東西
echo $ret;

 

需要注意的就是header頭,我們可以用來(lái)檢查HTTP狀態(tài)結(jié)果,例如服務(wù)器返回302讓客戶端做跳轉(zhuǎn)等的操作。另外還可以發(fā)送HEADER信息,用來(lái)認(rèn)證。

CURL還能用于并發(fā)操作,多線程的并發(fā),比C#那個(gè)偽的強(qiáng)哦。。并發(fā)處理的例子:

 


$url1 = "http://www.abc.com/test1.php";
$url2 = "http://www.abc.com/test2.php";

$cl1 = curl_init();  //初始化2個(gè)用于線程操作的
$cl2 = curl_init();

curl_setopt(
$cl1,CURLOPT_URL,$url1);
curl_setopt(
$cl2,CURLOPT_URL,$url2);

//繼續(xù)用cookie文件,假設(shè)我們剛才已經(jīng)登錄,需要保持會(huì)話的話
curl_setopt($cl1, CURLOPT_RETURNTRANSFER, true);
curl_setopt(
$cl1, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt(
$cl1, CURLOPT_COOKIEJAR, "cookie.txt");

curl_setopt(
$cl2, CURLOPT_RETURNTRANSFER, true);
curl_setopt(
$cl2, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt(
$cl2, CURLOPT_COOKIEJAR, "cookie.txt");

$mh = curl_multi_init(); //主要靠這個(gè)初始化多線程的

curl_multi_add_handle(
$mh,$cl1);
curl_multi_add_handle(
$mh,$cl2);

$running = null;
do{
    curl_multi_exec(
$mh,$running);
while($running > 0); //跑完后running會(huì)被置0

//獲取返回結(jié)果

$ret = array();
$ret[] = curl_multi_getcontent($cl1);
$ret[] = curl_multi_getcontent($cl2);

//關(guān)閉
curl_multi_remove_handle($mh,$cl1);
curl_multi_remove_handle(
$mh,$cl2);

curl_multi_close(
$mh);

 

說(shuō)明一下,這里繼續(xù)用到cookie,可以讓CURL在發(fā)送請(qǐng)求的同時(shí)把cookie的內(nèi)容也header上去,這樣就保持了會(huì)話。多個(gè)并發(fā)的操作其實(shí)也類似,就是把幾個(gè)分別設(shè)置完,然后一起加到multi那個(gè)函數(shù)里,然后一并發(fā)送。

 


 

補(bǔ)充:

使用代理的方法,可以通過(guò)