网络封装

&of_base_com_net::request($url = null, $data = array(), $mode = false) 数据请求

<?php
/**
 * 回调或返回的结果结构, html状态码小于400算成功
 * 失败时 : {state:false, errno:失败码, errstr:错误描述}
 * 成功时 : {state:true, header:响应头, response:响应数据}
 */

of_base_com_net::request(
    'http://www.163.com/',                      //请求地址
    array('get' => array('m' => '1')),          //get参数, 可以是数组也可以是字符串
    array(                                      //异步执行完将数据写入到磁盘上
        'asCall' => 'of_base_com_disk::file',
        'params' => array(ROOT_DIR . '/demo.txt')
    )
);
of_base_com_net::request('http://www.163.com/', array(
    'get' => array(
        'key' => 'val'                          //设置$_GET['key'] = 'val'
    ),
    'post' => array(
        'key' => 'val'                          //设置$_POST['key'] = 'val'
    ),
    'file' => array(array(                      //此处是二维数组
        'name' => 'key',                        //上传文件$_FILES['key']
        'data' => 'val',                        //设置$_FILES['key']['tmp_name']文件内容
        'mime' => 'application/json'            //设置$_FILES['key']['type'] = 'application/json'
    ))
));

&of_base_com_net::dechunk(&$str) 解码chunk数据

<?php
$str = "5\r\nabcde\r\n1\r\nf0";
echo of_base_com_net::dechunk($str);    //结果 abcdef, 失败返回 false

of_base_com_net::cookie($isArr = true) 辅助 request 设置读取请求站的cookie

of_base_com_net::isCli() 是否支持执行php命令

返回 true=支持, false=不支持

网络请求事件

of_base_com_net::before请求开始前触发

接收触发参数 : {
     "params" :&请求参数 {
        "type"    : 交互类型(大写字符串)可以是 OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE
        "data"    : 报文主体数据(字符串)
        "get"     : get数据(字符串)
        "cookie"  : cookie数据(字符串)
        "header"  : 自定义头信息(字符串)
        "timeout" : [连接超时, 响应超时]
        "url"     : 访问路径(字符串)
        "oUrl"    : 原始访问路径(字符串)

        其它调用调用参数
     }
}

of_base_com_net::after请求结束后触发

接收触发参数 : {
     "params" :&请求参数, 同"of_base_com_net::before事件"结构
     "result" :&请求结果, 同"of_base_com_net::request"响应结构
}
<?php
//请求前修改地址
of::event('of_base_com_net::before', function ($p) {
    //修改访问地址(模拟代理)
    $p['params']['url'] = 'https://www.baidu.com/search/error.html';
});
//请求后修改结果
of::event('of_base_com_net::after', function ($p) {
    //重试访问地址(模拟重试)
    $p['result']['state'] || $p['result'] = of_base_com_net::request($p['params']['url'], $p['params']);
});

//模拟访问代理与重试
print_r(of_base_com_net::request('http://php.net/', array(
    'post' => array('a' => 1)
)));