&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/', //请求地址
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
-
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命令
网络请求事件
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)
)));