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获取类中常量,属性,及方法列表的方法
Apr 09 PHP
8个出色的WordPress SEO插件收集
Feb 26 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
Aug 08 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
PHP计算加权平均数的方法
Jul 16 PHP
php文件缓存方法总结
Mar 16 PHP
PHP自定义函数格式化json数据示例
Sep 14 PHP
php实现数组纵向转横向并过滤重复值的方法分析
May 29 PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 PHP
php中文语义分析实现方法示例
Sep 28 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 PHP
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
Mar 29 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中interface的用处详解
2020/07/26 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
2017/04/24 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
python在linux中输出带颜色的文字的方法
2014/06/19 Python
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
python django生成迁移文件的实例
2019/08/31 Python
python+OpenCV实现图像拼接
2020/03/05 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
Flask处理Web表单的实现方法
2021/01/31 Python
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
大学生专科毕业生自我评价
2013/11/17 职场文书
水电工岗位职责
2014/02/12 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
合伙协议书范本
2014/04/21 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
员工考勤管理制度
2015/08/06 职场文书
送给客户微信问候语!
2019/07/04 职场文书
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python