PHP_CURL庫函式
阿新 • • 發佈:2018-11-11
你可能在你的編寫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;
}