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中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
PHP 巧用数组降低程序的时间复杂度
Jan 01 PHP
PHP 多维数组排序(usort,uasort)
Jun 30 PHP
PHP源码之explode使用说明
Aug 05 PHP
php中使用DOM类读取XML文件的实现代码
Dec 14 PHP
使用php测试硬盘写入速度示例
Jan 27 PHP
php判断访问IP的方法
Jun 19 PHP
php格式化时间戳
Dec 17 PHP
PHP asXML()函数讲解
Feb 03 PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
laravel框架中视图的基本使用方法分析
Nov 23 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
python 远程统计文件代码分享
2015/05/14 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
Python3 操作符重载方法示例
2017/11/23 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
python中update的基本使用方法详解
2019/07/17 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
汽车专业毕业生推荐信
2013/11/12 职场文书
毕业生自荐信格式
2014/03/07 职场文书
数学系毕业生求职信
2014/05/29 职场文书
爱国影片观后感
2015/06/18 职场文书
庆七一晚会主持词
2015/06/30 职场文书
运动会主持人开幕词
2016/03/04 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
关于Javascript闭包与应用的详解
2021/04/22 Javascript
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers