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 &amp;&amp; 逻辑与运算符使用说明
Mar 04 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
Jun 28 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
Nov 10 PHP
Linux编译升级php的详细方法
Nov 04 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
php post大量数据时发现数据丢失问题解决方法
Jun 20 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
Sep 03 PHP
PHP的微信支付接口使用方法讲解
Mar 08 PHP
PHP抽象类与接口的区别详解
Mar 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
python操作文件的参数整理
2019/06/11 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
高中课前三分钟演讲稿
2014/08/18 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
高中生旷课检讨书
2014/10/08 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL