Skip to content

components net

tolizhan edited this page May 1, 2025 · 9 revisions

网络封装

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

  • urlstring
    请求的完整路径(非完整路径将用当前站数据填充)
  • dataarray
    提交数据,含有如下结构的数组,其数据可以是字符串或数组
    {
        "type"    : 交互类型,('GET')可以是 OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE
        "data"    : 报文主体数据('')
        "header"  : 自定义头信息(''), 可数组[不换行头, ...]
        "cookie"  : cookie数据(''),
        "get"     : get数据(''), 
        "post"    : post数据,相当于type=POST, data=当期值(''),
        "file"    : 上传文件,默认设置type=POST, 结构为 [{
            "name" : 附件字段名
            "path" : 文件磁盘路径, 设置 data 不用设置此值
            "data" : 文件二进制数据, 设置 path 时不用设置此值
            "mime" : 附件类型, 设置Content-Type('application/octet-stream')
            "head" : 自定义头信息(''), 可数组[不换行头, ...]
            "file" : 附件文件名, 默认使用 path 文件名或生成'xx.bin'
        }, ...]
        "timeout" : 超时时间(10s), 数字=连接超时, 数组=[连接超时(10), 响应超时(default_socket_timeout)],
        "context" : 配置上下文, 默认={
            "proxy" : 代理配置 {
                "addr" : 代理地址, tcp://xxx:port
                "user" : 用户密码, user:password
            },
            "ssl" : 关闭 ssl 证书验证 {
                "verify_peer_name" : false
            }
        }
        "save"    : 将响应体保存到磁盘, 下文件更省内存, 设置后方法返回的response为""
    }
  • modeboolean, string, array
    false(默认) = 同步请求
    true        = 无结果异步请求
    回调结构    = 异步请求回调符合 of::callFunc 结构(不能带资源参数), 接收响应结果
                  若url为"", 则仅触发回调不发生网络请求
<?php
/**
 * 回调或返回的结果结构, html状态码小于400算成功
 * 失败时 : {state:false, errno:失败码, errstr:错误描述}
 * 成功时 : {state:true, header:响应头, response:响应数据}
 */

of_base_com_net::request(     'http://www.163.com/&#039;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//请求地址     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/&#039;,&nbsp;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数据

  • strstring
    指定解码字符串
<?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

  • configarray *为必填项
    {
        "domain" :*指定权限域名
        "path"   :*指定有效路径
        "name"   : empty=读取有效cookie, 字符串=设置cookie
        "value"  : null=删除name, 字符串=设置name
        "expire" : empty(默认)=不过期, value的过期时间格式
        "encode" : 是否对value进行 RFC 1738 编码,默认=true
    }

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&#039;;
});
//请求后修改结果
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/&#039;,&nbsp;array(     'post' => array('a' => 1) )));

Clone this wiki locally