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 相关文章推荐
PHP4中session登录页面的应用
Jul 25 PHP
php获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
php tp验证表单与自动填充函数代码
Feb 22 PHP
php的XML文件解释类应用实例
Sep 22 PHP
实例详解PHP中html word 互转的方法
Jan 28 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
Nov 05 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
PHP 计算两个特别大的整数实例代码
May 07 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
php7 图形用户界面GUI 开发示例
Feb 22 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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
一个简洁的多级别论坛
2006/10/09 PHP
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
Python urllib2运行过程原理解析
2020/06/04 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
企业厂长岗位职责
2013/12/17 职场文书
初二物理教学反思
2014/01/29 职场文书
户外活动总结范文
2014/04/30 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
放射科岗位职责
2015/02/14 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
Python快速实现一键抠图功能的全过程
2021/06/29 Python
python中的3种定义类方法
2021/11/27 Python
Python Flask实现进度条
2022/05/11 Python