MicroPHP 实战类库推荐

热门浏览
[官方]HTTP操作类

主要功能:

1.模拟登录,cookie自动管理,也可以手动结合自动管理cookie。

2.抓取数据,支持get,post。

特点:

1.基于CURL

2.使用方便灵活即使禁止了CURL的自动30x跳转处理,该类也能正常处理30x重定向。

代码下载地址:WoniuHttp.class.php

使用实例:

1.基本使用

1.GET

$http=new WoniuHttp();
$data=$http->get('http网址');//返回的是页面内容
//如果有传递数据,可以传递第二个参数
$args['code']='21';
$data=$http->get('http网址',$args);
//如果要设置本次请求的头部信息,可以传递第三个参数
//$header是附加的HTTP头,比如:array('Connection:keep-alive','Cache-Control:max-age=0'),注意冒号前后不能有空格,默认 null
$data=$http->get('http网址',null,$header);
//默认get和post是不自动处理30x跳转的,可以通过指定第四个参数来控制遇到301或302时跳转的最大次数,默认 0 不跳转
$data=$http->get('http网址',null,null,1);
2.POST
$http = new WoniuHttp();
$data['user_login'] = $user;
$data['user_pwd'] = md5($pass);
$data=$http->setReferer('http://www.liepin.com/')->post('http://www.example.com/user/ajaxlogin/', $data);
$error_code=$http->errorCode();//获取curl出错代码(大于零的数),如果没有错误,返回0
$error_msg=$http->errorMsg();  //获取curl出错字符串信息,如果没有错误,返回空
$http_code=$http->code();      //返回的http状态码
if($error_code){
    exit($error_msg);
}
$is_redirect=$http->isRedirect()//是否是重定向
if($is_redirect){
    //do something
    $http_location=$http->location();//获取重定向的地址
}else{
    //do something
}

2.高级操作

提示:高级操作用到了类库 : Simple HTML DOM Parser

1.模拟登录 智联招聘 并抓取简历。

<?php
/**
 * 智联招聘
 * @param type $user
 * @param type $pass
 * @param type $save_path
 * @param type $error_msg
 * @return boolean
 */
function zhaopin($user, $pass, $save_path, &$error_msg) {
    $http = new WoniuHttp();
    $data['int_count'] = 999;
    $data['errUrl'] = 'http://my.zhaopin.com/loginmgr/loginproc.asp';
    $data['isautologin'] = 0;
    $data['requestFrom'] = 'portal';
    $data['loginname'] = $user;
    $data['password'] = $pass;
    $http->setReferer('http://www.zhaopin.com/')->post('http://i.zhaopin.com/Login/LoginManager/Login', $data);
    $index = $http->get('http://my.zhaopin.com/myzhaopin/resume_list.asp');
    $html = str_get_html($index); //http://my.zhaopin.com/myzhaopin/
    $e = $html->find('a[href^=resume_preview_edit.asp]', 0);
    if ($e && $e->href) {
        //登录成功
        //解析url参数
        $url = parse_url($e->href);
        parse_str($url['query'], $arr);
        $ext_id = $arr['ext_id'];
        $resume_id = $arr['resume_id'];
        $doc_url = 'http://my.zhaopin.com/myzhaopin/resume_preview.asp?ext_id=' . $ext_id . '&resume_id=' . $resume_id . '&Version_Number=1&language_id=1&dflag=1&m=0.' . rand(10000, 100000) . rand(10000, 100000);
        //下载简历
        $doc = $http->setReferer('http://my.zhaopin.com/myzhaopin/resume_list.asp')->get($doc_url);
        if ($doc) {
            file_put_contents($save_path, $doc);
            $error_msg = null;
            return true;
        } else {
            //获取简历失败
            $error_msg = '获取简历失败';
            return false;
        }
    } else {
        //登录失败
        $error_msg = '登录失败或者简历可能为空';
        return false;
    }
}
使用示例:

<?php
if (zhaopin($user, $pass, 'zhaopin_resume_' . $save_path, $error_msg)) {
    echo 'okay';
} else {
    echo $error_msg;
}
2.模拟登录 猎聘网 并抓取简历

<?php
/**
 * 猎聘网
 * @param type $user
 * @param type $pass
 * @param type $save_path
 * @param type $error_msg
 * @return boolean
 */
function liepin($user, $pass, $save_path, &$error_msg) {
    $http = new WoniuHttp();
    $data['isMd5'] = 1;
    $data['layer_from'] = 'wwwindex_rightbox_new';
    $data['user_login'] = $user;
    $data['user_pwd'] = md5($pass);
    $data['chk_remember_pwd'] = 'on';
    $http->setReferer('http://www.liepin.com/')->post('http://www.liepin.com/user/ajaxlogin/', $data);
    $index = $http->get('http://c.liepin.com/');
    $html = str_get_html($index);
    $e = $html->find('a[href^=/resume/download?res_id_encode]', 0);
    if ($e && $e->href) {
        //登录成功
        //下载简历
        $doc = $http->setReferer('http://www.liepin.com/')->get('http://c.liepin.com' . $e->href);
        if ($doc) {
            file_put_contents($save_path, $doc);
            $error_msg = null;
            return true;
        } else {
            //获取简历失败
            $error_msg = '获取简历失败';
            return false;
        }
    } else {
        //登录失败
        $error_msg = '登录失败或者简历可能为空';
        return false;
    }
}
使用示例:

<?php
if (liepin($user, $pass, 'zhaopin_resume_' . $save_path, $error_msg)) {
    echo 'okay';
} else {
    echo $error_msg;
}

3.类方法列表

/**
  * 请求完成后,获取返回的HTTP状态码
  * @return int
 */
 public function code() {...}

 /**
   * 获取请求返回的页面内容
   * @param type $is_json  是否使用json_decode()解码一下,当返回数据是json的时候这个比较有用。默认false
   * @return string|array 
 */
 public function data($is_json = false) {...}

/**
 * 获取curl出错信息,返回数组:形如array('code'=>1000,'msg'=>'xxx'),如果没有错误,code是0
 * @return array
 */
public function error() {...}

/**
 * 获取curl出错代码(大于零的数),如果没有错误,返回0
 * @return int
 */
public function errorCode() {...}

/**
 * 获取curl出错字符串信息,如果没有错误,返回空
 * @return string
 */
public function errorMsg() {...}

/**
 * 使用GET方式请求一个页面
 * @param String  $url           页面地址
 * @param Array   $data          要发送的数据数组或者原始数据,比如:array('user'=>'test','pass'=>'354534'),键是表单字段名称,值是表单字段的值,默认 null
 * @param Array   $header        附加的HTTP头,比如:array('Connection:keep-alive','Cache-Control:max-age=0'),注意冒号前后不能有空格,默认 null
 * @param int     $max_redirect  遇到301或302时跳转的最大次数 ,默认 0 不跳转
 * @return String 页面数据
 */
public function get($url, $data = null, Array $header = null, $max_redirect = 0) {...}

/**
 * 获取请求返回的HTTP头部字符串
 * @return string
 */
public function header() {...}

/**
 * 获取请求返回的页面内容
 * @param type $is_json  是否使用json_decode()解码一下,当返回数据是json的时候这个比较有用。默认false
 * @return string|array 
 */
public function data($is_json = false) {...}

/**
 * 请求完成后,获取请求相关信息,就是curl_getinfo()返回的信息数组
 * @return array
 */
public function info() {...}

/**
 * 请求完成后,响应是否是重定向
 * @return boolean
 */
public function isRedirect() {...}

/**
 * 请求完成后,响应是重定向的时候,这里会返回重定向的链接,如果不是重定向返回null
 * @return string
 */
public function location() {...}

/**
 * 请求完成后,获取最后一次请求的地址,这个往往是有重定向的时候使用的。
 * @return string
 */
public function lastUrl() {...}

/**
 * 使用POST方式请求一个页面
 * @param String  $url           页面地址
 * @param Array   $data          要发送的数据数组,比如:array('user'=>'test','pass'=>'354534'),键是表单字段名称,值是表单字段的值,默认 null
 * @param Array   $header        附加的HTTP头,比如:array('Connection:keep-alive','Cache-Control:max-age=0'),注意冒号前后不能有空格,默认 null
 * @param int     $max_redirect  遇到301或302时跳转的最大次数 ,默认 0 不跳转
 * @return String 页面数据
 */
public function post($url, $data = null, Array $header = null, $max_redirect = 0) {...}

/**
 * 设置附加的cookie,这个不会影响自动管理的cookie<br>
 * 提醒:<br>
 * 1.每次请求完成后附加的cookie会被清空,自动管理的cookie不会受到影响。<br>
 * 2.如果cookie键名和自动管理的cookie中键名相同,那么请求的时候使用的是这里设置的值。<br>
 * 3.如果cookie键名和自动管理的cookie中键名相同,当请求完成后自动管理的cookie中键的值保持之前的不变,这里设置的值会被清除。<br>
 * 比如:<br>
 * 自动管理cookie里面有:name=snail,请求之前用setCookie设置了name=123<br>
 * 那么请求的时候发送的cookie是name=123,请求完成后恢复name=snail,如果再次请求那么发送的cookie中name=snail<br>
 * 
 * @param type $key   cookie的key,也可以是一个键值对数组一次设置多个cookie,此时不需要第二个参数。
 * @param type $val   cookie的value
 * @return WoniuHttp
 */
public function setCookie($key, $val = NULL) {...}

/**
 * 设置curl句柄参数
 * @param type $opt     curl_setopt()的第二个参数
 * @param type $val     curl_setopt()的第三个参数
 * @return \WoniuHttp
 */
public function setOpt($opt, $val) {...}

/**
 * 设置当次请求使用的referer,当get或者post请求完毕后,referer会被重置为null
 * @param type $referer
 * @return WoniuHttp
 */
public function setReferer($referer) {...}

/**
 *设置所有请求默认使用的UserAgent
*/
public function setUserAgent($user_agent) {...}