最新消息:重新回归WordPress,我要比较认真的开始更新我的博客了。

CURL采集类,可模似浏览器操作

程序问题 hanlei 2160浏览
 //php脚本开始
    /*Get请求远程内容函数
    url 请求网址
    head 模似请求头
    foll 是否自动跳转
    ref 来路
    head 是否设置头
    */
    $ip=$_SERVER['REMOTE_ADDR'];
    $head=array(
    'X-FORWARDED-FOR:'.$ip,
    'CLIENT-IP:'.$ip,
    'Accept-Language: zh-cn',
    'Accept-Encoding:gzip,deflate',
    'Connection: Keep-Alive',
    'Cache-Control: no-cache'
    );
    $cookie_file = dirname(__FILE__).'/cookie.txt'; //COOKIE存放地址
    function get($url,$head=false,$foll=1,$ref=false){
    $curl = curl_init(); // 启动一个CURL会话
    if($head){
    curl_setopt($curl,CURLOPT_HTTPHEADER,$head);//模似请求头
    }
    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    @curl_setopt($curl, CURLOPT_FOLLOWLOCATION,$foll); // 使用自动跳转
    if($ref){
    curl_setopt($curl, CURLOPT_REFERER, $ref);//带来的Referer
    }else{
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    }
    curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求
    curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['cookie_file']); // 存放Cookie信息的文件名称
    curl_setopt($curl, CURLOPT_COOKIEFILE,$GLOBALS ['cookie_file']); // 读取上面所储存的Cookie信息
    curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');//解释gzip
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
    $tmpInfo = curl_exec($curl); // 执行操作
    if (curl_errno($curl)) {echo 'Errno'.curl_error($curl);}
    $data[]=curl_getinfo($curl);
    curl_close($curl); // 关键CURL会话
    $data[]=$tmpInfo;
    return $data; // 返回数据
    }
    function post($url,$head=false,$foll=1,$ref=false,$post){
    $curl = curl_init(); // 启动一个CURL会话
    if($head){
    curl_setopt($curl,CURLOPT_HTTPHEADER,$head);//模似请求头
    }
    curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    @curl_setopt($curl, CURLOPT_FOLLOWLOCATION,$foll); // 使用自动跳转
    if($ref){
    curl_setopt($curl, CURLOPT_REFERER, $ref);//带来的Referer
    }else{
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    }
    curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post); // Post提交的数据包
    curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['cookie_file']); // 存放Cookie信息的文件名称
    curl_setopt($curl, CURLOPT_COOKIEFILE,$GLOBALS ['cookie_file']); // 读取上面所储存的Cookie信息
    curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');//解释gzip
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
    $tmpInfo = curl_exec($curl); // 执行操作
    if (curl_errno($curl)) {echo 'Errno'.curl_error($curl);}
    $data[]=curl_getinfo($curl);
    curl_close($curl); // 关键CURL会话
    $tmpInfo=preg_replace('/script/','js',$tmpInfo);
    $data[]=$tmpInfo;
    return $data; // 返回数据
    }</code>

    //截取字符
    function preg_message($message, $rule, $getstr, $limit=1) {
    $result = array('0'=>'');
    $rule = conver_trule($rule); //转义正则表达式特殊字符串
    $rule = str_replace('\['.$getstr.'\]', '\s*(.+?)\s*', $rule); //解析为正则表达式
    if($limit == 1) {
    preg_match("/$rule/is", $message, $rarr);
    if(!empty($rarr[1])) {
    $result[0] = $rarr[1];
    }
    } else {
    preg_match_all("/$rule/is", $message, $rarr);
    if(!empty($rarr[1])) {
    $result = $rarr[1];
    }
    }
    return $result;
    }
    /**
    * 转义正则表达式字符串
    */
    function conver_trule($rule) {
    $rule = preg_quote($rule, "/"); //转义正则表达式
    $rule = str_replace('\*', '.*?', $rule);
    $rule = str_replace('\|', '|', $rule);
    return $rule;
    }
    /*转编码*/
    function escape($str) {
    preg_match_all("/[-].|[\x01-]+/",$str,$r);
    $ar = $r[0];
    foreach($ar as $k=>$v) {
    if(ord($v[0]) < 128)
    $ar[$k] = rawurlencode($v);
    else
    $ar[$k] = "%u".bin2hex(iconv("GB2312","UCS-2",$v));
    }
    return join("",$ar);
    }

转载请注明:HANLEI'BLOG » CURL采集类,可模似浏览器操作