php实现httpRequest的方法


Posted in PHP onMarch 13, 2015

本文实例讲述了php实现httpRequest的方法。分享给大家供大家参考。具体如下:

想从学校图书馆的网站上抓取数据处理之后在返回给浏览器,试了不少方法。首先试了http_request(),但是这个学院pecl_http支持,后来又试了网上流传甚广的class HttpRequest,可能是我不会使用,也失败了。后来看到了函数httpRequest($url, $post='', $method='GET', $limit=0, $returnHeader=FALSE, $cookie='', $bysocket=FALSE, $ip='', $timeout=15, $block=TRUE),用它成功了,因此贴出来分享一下。函数代码如下:

<?php  

    /** 

    * Respose A Http Request 

    * 

    * @param string $url 

    * @param array $post 

    * @param string $method 

    * @param bool $returnHeader 

    * @param string $cookie 

    * @param bool $bysocket 

    * @param string $ip 

    * @param integer $timeout 

    * @param bool $block 

    * @return string Response 

    */  

    function httpRequest($url,$post='',$method='GET',$limit=0,$returnHeader=FALSE,$cookie='',$bysocket=FALSE,$ip='',$timeout=15,$block=TRUE) {  

       $return = '';  

       $matches = parse_url($url);  

       !isset($matches['host']) && $matches['host'] = '';  

       !isset($matches['path']) && $matches['path'] = '';  

       !isset($matches['query']) && $matches['query'] = '';  

       !isset($matches['port']) && $matches['port'] = '';  

       $host = $matches['host'];  

       $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';  

       $port = !empty($matches['port']) ? $matches['port'] : 80;  

       if(strtolower($method) == 'post') {  

           $post = (is_array($post) and !empty($post)) ? http_build_query($post) : $post;  

           $out = "POST $path HTTP/1.0\r\n";  

           $out .= "Accept: */*\r\n";  

           //$out .= "Referer: $boardurl\r\n";  

           $out .= "Accept-Language: zh-cn\r\n";  

           $out .= "Content-Type: application/x-www-form-urlencoded\r\n";  

           $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";  

           $out .= "Host: $host\r\n";  

           $out .= 'Content-Length: '.strlen($post)."\r\n";  

           $out .= "Connection: Close\r\n";  

           $out .= "Cache-Control: no-cache\r\n";  

           $out .= "Cookie: $cookie\r\n\r\n";  

           $out .= $post;  

       } else {  

           $out = "GET $path HTTP/1.0\r\n";  

           $out .= "Accept: */*\r\n";  

           //$out .= "Referer: $boardurl\r\n";  

           $out .= "Accept-Language: zh-cn\r\n";  

           $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";  

           $out .= "Host: $host\r\n";  

           $out .= "Connection: Close\r\n";  

           $out .= "Cookie: $cookie\r\n\r\n";  

       }  

       $fp = fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);  

       if(!$fp) return ''; else {  

           $header = $content = '';  

           stream_set_blocking($fp, $block);  

           stream_set_timeout($fp, $timeout);  

           fwrite($fp, $out);  

           $status = stream_get_meta_data($fp);  

           if(!$status['timed_out']) {//未超时  

               while (!feof($fp)) {  

                   $header .= $h = fgets($fp);  

                   if($h && ($h == "\r\n" ||  $h == "\n")) break;  

               }  

  

               $stop = false;  

               while(!feof($fp) && !$stop) {  

                   $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));  

                   $content .= $data;  

                   if($limit) {  

                       $limit -= strlen($data);  

                       $stop = $limit <= 0;  

                   }  

               }  

           }  

        fclose($fp);  

           return $returnHeader ? array($header,$content) : $content;  

       }  

    }  

?>

调用也很简单的。简单的例子:

echo httpRequest('http://www.baidu.com');

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
生成静态页面的PHP类
Jul 15 PHP
真正面向对象编程:PHP5.01发布
Oct 09 PHP
一个简单的MySQL数据浏览器
Oct 09 PHP
第七节--类的静态成员
Nov 16 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
Sep 15 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
简单谈谈PHP中strlen 函数
Feb 27 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
Nov 06 PHP
php的instanceof和判断闭包Closure操作示例
Jan 26 PHP
php使用curl简单抓取远程url的方法
Mar 13 #PHP
php对关联数组循环遍历的实现方法
Mar 13 #PHP
php限制上传文件类型并保存上传文件的方法
Mar 13 #PHP
php短网址和数字之间相互转换的方法
Mar 13 #PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 #PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 #PHP
PHP使用ffmpeg给视频增加字幕显示的方法
Mar 12 #PHP
You might like
php访问查询mysql数据的三种方法
2006/10/09 PHP
献给php初学者(入门学习经验谈)
2010/10/12 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
分享一下贝贝成长进度的php代码
2012/09/14 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
javascript 显示当前系统时间代码
2009/12/28 Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
Vue实现table上下移动功能示例
2019/02/21 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
使用html5制作loading图的示例
2014/04/14 HTML / CSS
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
管理提升方案
2014/06/04 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
公司规章制度范本
2015/08/03 职场文书