在開發中我們有時會碰到這樣的需求,需要採集其他網站數據,或者向其他網站提交數據,我們需要CURL通過設置curl_setopt模擬來源,IP,提交表單數據,模擬登陸等。下面給出實際示例:
$ip = '118.89.238.218';
$post = array (
'name' => 'xxxx',
'password' => 'xxxxxx',
); //需要提交的表單數據
$url = 'https://xxxxx.cn/login/login.html'; //提交地址
$refer = 'https://xxxxxx.cn/Index/index.html'; //模擬來源地址
$header = array(
'Host:xxxx.cn',
'Referer:'.$refer,
'X-Forwarded-For:'.$ip,
'Client-Ip:'.$ip,
'Upgrade-Insecure-Requests:1',
'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36',
);
$res = curl_post($url, $cookie, $post, $refer, $header);
if(preg_match('/<em>登錄成功!<\/em>/', $res)){
echo date('Y-m-d H:i:s')."\t".$post['name'].'登錄成功';
}else{
echo date('Y-m-d H:i:s')."\t".$post['name'].'登錄失敗';
}
curl函數封裝(post方式)
function curl_post($url, $cookie, $post = array(), $refer = '', $header = array()) {
$curl = curl_init();//初始化curl模塊
curl_setopt($curl, CURLOPT_URL, $url);//登錄提交的地址
$refer && curl_setopt($curl, CURLOPT_REFERER, $refer);
count($header) && curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//模擬頭信息
curl_setopt($curl, CURLOPT_HEADER, 0);//是否顯示頭信息
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//是否自動顯示返回的信息
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); //讀取cookie
curl_setopt($curl, CURLOPT_POST, 1);//post方式提交
count($post) && curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));//要提交的信息
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //設置Cookie信息保存在指定的文件中
$rs = curl_exec($curl);//執行cURL
curl_close($curl);//關閉cURL資源,並且釋放系統資源
return $rs;
}
curl函數封裝(get方式)
function curl_get($url, $cookie, $get = array(), $refer = '', $header = array()) {
$curl = curl_init();//初始化curl模塊
curl_setopt($curl, CURLOPT_URL, $url);//登錄提交的地址
$refer && curl_setopt($curl, CURLOPT_REFERER, $refer);
count($header) && curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//模擬頭信息
curl_setopt($curl, CURLOPT_HEADER, 0);//是否顯示頭信息
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//是否自動顯示返回的信息
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); //讀取cookie
curl_setopt($curl, CURLOPT_POST, 0);//post方式提交
count($get) && curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($get));//要提交的信息
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //設置Cookie信息保存在指定的文件中
$rs = curl_exec($curl);//執行cURL
curl_close($curl);//關閉cURL資源,並且釋放系統資源
return $rs;
}