相關關鍵詞
關于我們
最新文章
PHP對CURL函數的使用
PHP在LINUX上可以利用CURL程序進行一些http的交互,甚至包括網站登錄,POST請求等。當然要求系統(tǒng)帶CURL,其次版本還要7以上,具體可參考手冊。
首先看下最簡單的獲取一個HTTP頁面的寫法:

$url = "http://www.163.com"; //以163為例
$session = curl_init($url);
curl_exec($session);
if (curl_errno($session)) //出錯處理
echo curl_error($session);
curl_close($session);
功能就是GET 163的主頁。然后更進一步,使用curl_setopt函數做些調整。
然后看個復雜點的,作用是登錄網站。

$url = "http://www.abc.com/login.php";
$postargs = "name=jack&password=123456";
$session = curl_init($url);
//設置postargs參數,就POST出去
curl_setopt($session, CURLOPT_POST, true);
curl_setopt($session, CURLOPT_POSTFIELDS, $postargs);
//是否返回header信息,一般可用于檢查http返回狀態(tài)值
curl_setopt($session, CURLOPT_HEADER, true);
//使用cookie,可以用于登錄操作,注意需要對應的目錄權限
curl_setopt($session,CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($session,CURLOPT_COOKIEJAR, "cookie.txt");
//將返回結果寫入變量
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($session);
if (curl_errno($session)) {
echo curl_error($session);
}
curl_close($session);
//輸出結果,在這之后可以相應的parse自己需要的東西
echo $ret;
需要注意的就是header頭,我們可以用來檢查HTTP狀態(tài)結果,例如服務器返回302讓客戶端做跳轉等的操作。另外還可以發(fā)送HEADER信息,用來認證。
CURL還能用于并發(fā)操作,多線程的并發(fā),比C#那個偽的強哦。。并發(fā)處理的例子:

$url1 = "http://www.abc.com/test1.php";
$url2 = "http://www.abc.com/test2.php";
$cl1 = curl_init(); //初始化2個用于線程操作的
$cl2 = curl_init();
curl_setopt($cl1,CURLOPT_URL,$url1);
curl_setopt($cl2,CURLOPT_URL,$url2);
//繼續(xù)用cookie文件,假設我們剛才已經登錄,需要保持會話的話
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(); //主要靠這個初始化多線程的
curl_multi_add_handle($mh,$cl1);
curl_multi_add_handle($mh,$cl2);
$running = null;
do{
curl_multi_exec($mh,$running);
} while($running > 0); //跑完后running會被置0
//獲取返回結果
$ret = array();
$ret[] = curl_multi_getcontent($cl1);
$ret[] = curl_multi_getcontent($cl2);
//關閉
curl_multi_remove_handle($mh,$cl1);
curl_multi_remove_handle($mh,$cl2);
curl_multi_close($mh);
說明一下,這里繼續(xù)用到cookie,可以讓CURL在發(fā)送請求的同時把cookie的內容也header上去,這樣就保持了會話。多個并發(fā)的操作其實也類似,就是把幾個分別設置完,然后一起加到multi那個函數里,然后一并發(fā)送。
補充:
使用代理的方法,可以通過