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
destoon实现VIP排名一直在前面排序的方法
Aug 21 PHP
smarty半小时快速上手入门教程
Oct 27 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 PHP
PHP合并静态文件详解
Nov 14 PHP
PHP简单生成缩略图相册的方法
Jul 29 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 PHP
PHP实现与java 通信的插件使用教程
Aug 11 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输出缓存(output_buffering)的深入理解
2013/06/13 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
PHP循环结构实例讲解
2014/02/10 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
python求众数问题实例
2014/09/26 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
完美解决安装完tensorflow后pip无法使用的问题
2018/06/11 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
django admin组件使用方法详解
2019/07/19 Python
英国探险旅游专家:Explore
2018/12/20 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
自动化系在校本科生求职信
2013/10/23 职场文书
毕业实习个人鉴定范文
2013/12/10 职场文书
承办会议欢迎词
2014/01/17 职场文书
酒店拾金不昧表扬信
2014/01/18 职场文书
政府法律服务方案
2014/06/14 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
详解Go语言中Get/Post请求测试
2022/06/01 Golang