cURL
cURL可以使用URL的語法模擬瀏覽器來傳輸數據,因為它是模擬瀏覽器,因此它同樣支持多種協議,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等協議都可以很好的支持,包括一些:HTTPS認證,HTTP POST方法,HTTP PUT方法,FTP上傳,keyberos認證,HTTP上傳,代理服務器,cookies,用戶名/密碼認證,下載文件斷點續傳,上傳文件斷點續傳,http代理服務器管道,甚至它還支持IPv6,scoket5代理服務器,通過http代理服務器上傳文件到FTP服務器等等。
本文主要介紹的是php遠程請求CURL(爬蟲、保存登錄狀態)的相關內容,下面話不多說了,來一起看看詳細的介紹吧
GET案例
/**
* curl_get
* @param $url
* @param null $param
* @param null $options
* @return array
*/
function curl_get($url,$param = null,$options = null){
if(empty($options)){
$options = array(
'timeout' => 30,// 請求超時
'header' => array(),
'cookie' => '',// cookie字符串,瀏覽器直接復制即可
'cookie_file' => '',// 文件路徑,并要有讀寫權限的
'ssl' => 0,// 是否檢查https協議
'referer' => null
);
}else{
empty($options['timeout']) $options['timeout'] = 30;
empty($options['ssl']) $options['ssl'] = 0;
}
$result = array(
'code' => 0,
'msg' => 'success',
'body' => ''
);
if(is_array($param)){
$param = http_build_query($param);
}
$url = strstr($url,'?')?trim($url,'').''.$param:$url.'?'.$param;
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);// 設置url
!empty($options['header']) curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); // 設置請求頭
if(!empty($options['cookie_file']) file_exists($options['cookie_file'])){
curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']);
curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']);
}else if(!empty($options['cookie'])){
curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']);
}
curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); //curl解壓gzip頁面內容
curl_setopt($ch, CURLOPT_HEADER, 0);// 不獲取請求頭
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 輸出轉移,不輸出頁面
!$options['ssl'] curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); // 禁止服務器端的驗證ssl
!empty($options['referer']) curl_setopt($ch, CURLOPT_REFERER, $options['referer']);//偽裝請求來源,繞過防盜
curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
//執行并獲取內容
$output = curl_exec($ch);
//對獲取到的內容進行操作
if($output === FALSE ){
$result['code'] = 1; // 錯誤
$result['msg'] = "CURL Error:".curl_error($ch);
}
$result['body'] = $output;
//釋放curl句柄
curl_close($ch);
return $result;
}
POST案例
/**
* curl_post
* @param $url 請求地址
* @param null $param get參數
* @param array $options 配置參數
* @return array
*/
function curl_post($url,$param = null,$options = array()){
if(empty($options)){
$options = array(
'timeout' => 30,
'header' => array(),
'cookie' => '',
'cookie_file' => '',
'ssl' => 0,
'referer' => null
);
}else{
empty($options['timeout']) $options['timeout'] = 30;
empty($options['ssl']) $options['ssl'] = 0;
}
$result = array(
'code' => 0,
'msg' => 'success',
'body' => ''
);
if(is_array($param)){
$param = http_build_query($param);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);// 設置url
!empty($options['header']) curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); // 設置請求頭
if(!empty($options['cookie_file']) file_exists($options['cookie_file'])){
curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']);
curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']);
}else if(!empty($options['cookie'])){
curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']);
}
curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); //curl解壓gzip頁面內容
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
curl_setopt($ch, CURLOPT_HEADER, 0);// 不獲取請求頭
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 輸出轉移,不輸出頁面
!$options['ssl'] curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); // 禁止服務器端的驗證ssl
!empty($options['referer']) curl_setopt($ch, CURLOPT_REFERER, $options['referer']);//偽裝請求來源,繞過防盜
curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
//執行并獲取內容
$output = curl_exec($ch);
//對獲取到的內容進行操作
if($output === FALSE ){
$result['code'] = 1; // 錯誤
$result['msg'] = "CURL Error:".curl_error($ch);
}
$result['body'] = $output;
//釋放curl句柄
curl_close($ch);
return $result;
}
其他請求類型請自己參考封裝處理
到此這篇關于php遠程請求CURL(爬蟲、保存登錄狀態)的文章就介紹到這了,更多相關php遠程請求CURL(爬蟲、保存登錄狀態)內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- php curl發起get與post網絡請求案例詳解
- 淺談PHP模擬發送POST請求之curl基本使用
- php的curl攜帶header請求頭信息實現http訪問的方法
- PHP如何使用cURL實現Get和Post請求
- php curl返回錯誤碼60如何解決