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+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 PHP
在JavaScript中调用php程序
Mar 09 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
Oct 25 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
php的ddos攻击解决方法
Jan 08 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
php实现的操作excel类详解
Jan 15 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
php实现简单四则运算器
Nov 29 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生成图片验证码的方法
2016/04/15 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
2007/08/13 Javascript
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
python之yield表达式学习
2014/09/02 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
python tkinter实现屏保程序
2019/07/30 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
教师自荐信
2013/12/10 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
小学优秀教师材料
2014/12/15 职场文书
休假证明书
2015/06/24 职场文书
企业宣传稿范文
2015/07/23 职场文书
Java实现带图形界面的聊天程序
2022/06/10 Java/Android