1. 程式人生 > >PHP_CURL庫函式

PHP_CURL庫函式

你可能在你的編寫PHP指令碼程式碼中會遇到這樣的問題:怎麼樣才能從其他站點獲取內容呢?這裡有幾個解決方式;最簡單的就是在php中使用fopen()函式,但是fopen函式沒有足夠的引數來使用,比如當你想構建一個“網路爬蟲”,想定義爬蟲的客戶端描述(IE,firefox),通過不同的請求方式來獲取內容,比如POST,GET;等等這些需求是不可能用fopen() 函式實現的。

curl 模擬瀏覽器請求,比如獲取遠端瀏覽器內容,雖然可以用file_get-contents來代替,但curl還支援瀏覽器型別,cookie和來源ip等,功能相比強大

常用相關函式

curl_init() 初始化curl會話

curl_setopt() 設定curl傳輸選項

curl_exec 執行curl會話

curl_errno 返回最後一次的錯誤程式碼

curl_error 返回當前會話嘴週一次錯誤的字串

curl_close 關閉curl會話

例如

<?php
// 1. 初始化
 $ch = curl_init();
 // 2. 設定選項,包括URL
 curl_setopt($ch,CURLOPT_URL,"http://www.devdo.net");
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_HEADER,0);
 // 3. 執行並獲取HTML文件內容
 $output = curl_exec($ch);
 if($output === FALSE ){
 echo "CURL Error:".curl_error($ch);
 }
 // 4. 釋放curl控制代碼
 curl_close($ch);
 ?>
<?php
// 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;
}
?>

加深理解:

function getCurl($url,$cookie = null,$post_data = null,$miao = null){
 
	$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
	
	
	if($cookie)
	{
		
		if($cookie =='auto')
		{
			$cookie_string = '';
			$_COOKIE['user_id'] = 12;
			foreach($_COOKIE as $key=>$val)
			{
				$cookie_string .= $key.'='.$val.';';
			}
			curl_setopt($ch, CURLOPT_COOKIE,$cookie_string);
		}
		elseif(is_array($cookie) && $cookie['type']=='cookie_file')
		{
			//echo $cookie['value'];
			curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie['value']);
			curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie['value']);
		}
		else
		{
			curl_setopt($ch, CURLOPT_COOKIE,$cookie);
		}
	}
	if($post_data)
	{
		curl_setopt($ch, CURLOPT_POST, 1);
 
		// 把post的變數加上
 
		curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
	}
	
	//判斷超時處理
	if(!empty($miao)){
		curl_setopt($ch, CURLOPT_NOSIGNAL, 1);    //注意,毫秒超時一定要設定這個
		curl_setopt($ch, CURLOPT_TIMEOUT_MS, $miao);  //超時毫秒,cURL 7.16.2中被加入。從PHP 5.2.3起可使用	
		$head = curl_exec($ch);
		$curl_errno = curl_errno($ch);
		$curl_error = curl_error($ch);
		if($curl_errno>0){
			$head = '2';
		}else{
			$head = $head;
		}
	}else{
		$head = curl_exec($ch);
	}
 
 
 
    //$head = curl_exec($ch);
    //echo $url;echo 'bb';var_dump($head);exit;
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch); 
	return $head;
}