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 相关文章推荐
PHP5 安装方法
Jan 15 PHP
PHP编码规范之注释和文件结构说明
Jul 09 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 PHP
php强制运行广告的方法
Dec 01 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
php通过前序遍历树实现无需递归的无限极分类
Jul 10 PHP
php开发工具有哪五款
Nov 09 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 PHP
laravel 修改.htaccess文件 重定向public的解决方法
Oct 12 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
ajax实现无刷新分页(php)
2010/07/18 PHP
PHP实现的策略模式示例
2019/03/20 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
python中enumerate函数用法实例分析
2015/05/20 Python
Python中线程编程之threading模块的使用详解
2015/06/23 Python
python生成IP段的方法
2015/07/07 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
python简单验证码识别的实现方法
2019/05/10 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
物业管理毕业生个人的求职信
2013/11/30 职场文书
优秀团员个人事迹材料
2014/01/29 职场文书
大学生活动策划方案
2014/02/10 职场文书
目标管理责任书
2014/04/15 职场文书
关爱残疾人标语
2014/06/25 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
销售员试用期自我评价
2014/09/15 职场文书
个人廉洁自律总结
2015/03/06 职场文书
小学安全工作总结2015
2015/05/18 职场文书