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 字符串操作入门教程
Dec 06 PHP
php 按指定元素值去除数组元素的实现方法
Nov 04 PHP
PHP中图片等比缩放的实例
Mar 24 PHP
php图片缩放实现方法
Feb 20 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
php递归删除目录与文件的方法
Jan 30 PHP
Php-Redis安装测试笔记
Mar 05 PHP
PHP设计模式之适配器模式代码实例
May 11 PHP
yii使用activeFileField控件实现上传文件与图片的方法
Dec 28 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
May 21 PHP
PHP7新特性foreach 修改示例介绍
Aug 26 PHP
实例解析php的数据类型
Oct 24 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实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
PHP内核探索之变量
2015/12/22 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
node.js中的console用法总结
2014/12/15 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
python读取Excel表格文件的方法
2019/09/02 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
基于python3实现倒叙字符串
2020/02/18 Python
信号生成及DFT的python实现方式
2020/02/25 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
Python学习之time模块的基本使用
2021/01/17 Python
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
艺术系应届生的自我评价
2013/10/19 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
2014年标准化工作总结
2014/12/17 职场文书
学校德育工作总结2015
2015/05/11 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python