一、组件简介
Z-BlogPHP 自带的 NetWork 网络组件是从 1.0 版本就开始附带的自研组件。历经多年的开发打磨,其功能已经非常成熟。
NetWork 组件由 Network 工厂类和 3 个业务组件:Network__curl、Network__filegetcontents、Network__fsockopen 类,分别对应了 PHP 里的三种访问网络的方式。使用 Network 工厂类创建网络操作组件时,默认的创建顺序是,如果 curl 扩展存在,就初始化 Network__curl;如果 allow_url_fopen 打开,fsockopen 存在,就初始化 Network__fsockopen;最后是返回 Network__filegetcontents。
二、组件方法简介
1、工厂类方法
- Network::Create():按默认顺序创建并返回一个新的网络操作组件;
- Network::Create(‘curl’) :创建并返回一个新的 Network__curl 网络操作组件;
- Network::Create(‘fsockopen’) :创建并返回一个新的 Network__fsockopen 网络操作组件;
- Network::Create(‘filegetcontents’) :创建并返回一个新的 Network__filegetcontents 网络操作组件。
2、业务组件属性
- responseText:返回的数据;
- responseHeader:返回的 Http Header;
- status:返回的状态码;
- statusText:返回的状态码文本。
3、业务组件方法
- open($Method, $Url):打开 network 组件;
- send($varBody = ”):network 组件发送连接;
- setRequestHeader($bstrHeader, $bstrValue):设置请求 Header;
- enableGzip():启用 Gzip 压缩;
- setMaxRedirs($n):设置最大重定向次数;
- addBinary($name, $entity):添加二进制文件上传;
- addText($name, $entity):添加发送参数;
- setTimeOuts($resolveTimeout, $connectTimeout, $sendTimeout, $receiveTimeout):设置超时;
- getAllResponseHeaders():获取所有的响应头;
- getResponseHeader($name):获取指定响应头。
4、1.7.2新加入方法
- getStatusCode():获取响应代码;
- getStatusText():获取完整的响应头;
- getReasonPhrase():获取响应代码的解释;
- getBody():获取响应正文;
- getHeaders:获取响应头数组;
- getHeader($name):获取指定响应头;
- hasHeader($name):判断指定响应头存在。
二、简易使用方法
示例代码 1:GET 方法访问网页:
//假定我们抓取so.com $url = 'https://www.so.com/'; $http = Network::Create(); $http->open('GET', $url); $http->enableGzip();//打开gzpi $http->setTimeOuts(120, 120, 0, 0);//设置超时 $http->send(); //获取访问后的正文 $txt = $http->responseText; //获取HTTP响应代码 $code = $http->status;//正常访问为200
示例代码 2:POST 方法访问网页:
//假定我们向某页面提交登录 $url = 'https://test/login.php'; $data = array(); $data['username'] = '神马'; $data['password'] = md5('都是浮云'); $http = Network::Create(); $http->open('POST', $url); $http->enableGzip();//打开gzpi $http->setTimeOuts(120, 120, 0, 0);//设置超时 $http->send($data); $txt = $http->responseText; echo $txt;
示例代码 3:设置 RequestHeader,User-Agent,Cookie 头:
$u = 'ZBlogPHP/173000';//user-agent $c = ' name=' . urlencode('nobody');//cookies name 为nobody $c .= ' ;password=' . urlencode('123456');//cookies password 为123456 //在send之前,设置setRequestHeader $http->setRequestHeader('User-Agent', $u); $http->setRequestHeader('Cookie', $c);
三、高级使用方法
示例代码 4:指定重定向次数
//NetWork组件默认重定向次数是0次,也就是遇到301,302就停 $url = 'https://test/http302.php'; $http = Network::Create(); $http->open('GET', $url); //设定重定向次数是5次,说明最多可以重定向5次,可避免死循环。 $http->setMaxRedirs(5); $http->send();
示例代码 5:上传文件:
$url = 'https://test/upload.php'; $http = Network::Create('curl');//指定使用curl组件 $http->open('POST', $url); $http->enableGzip();//打开gzpi $http->setTimeOuts(120, 120, 0, 0);//设置超时 $http->addBinary('file', 'D:/www/web.config');//指定某个文件 $http->send(); echo $http->responseText; //备注一下,1.7.2以下版本的filegetcontents和fsockopen,提交到自签证书的https网站有故障,1.7.2已修复了。
示例代码 6:Network__curl 的特别用法:
$http = Network::Create('curl');//指定使用curl组件 $http->open('GET', 'https://www.baidu.com/'); //众所周知curl有很多种设置,NetWork暴露出一个curl对象可供设置使用,需要在open()后send()之前。 if(is_object($http->ch)) { curl_setopt($http->ch, CURLOPT_URL, 'https://www.so.com/s'); } $http->send();