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
一些被忽视的PHP函数(简单整理)
Apr 30 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
关于crontab的使用详解
Jun 24 PHP
PHP添加Xdebug扩展的方法
Feb 12 PHP
对PHP语言认识上需要避免的10大误区
Jun 12 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
Thinkphp3.2实用篇之计算型验证码示例
Feb 09 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 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函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
js实现购物车功能
2018/06/12 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python判断端口是否打开的实现代码
2013/02/10 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
python数组复制拷贝的实现方法
2015/06/09 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
python基于http下载视频或音频
2018/06/20 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
机械设计制造专业个人求职信
2013/09/25 职场文书
最新的互联网创业计划书
2014/01/10 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
运动会开幕式致辞
2015/07/29 职场文书
爱国主义主题班会
2015/08/14 职场文书
《将心比心》教学反思
2016/02/23 职场文书