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 Token(令牌)设计
Mar 15 PHP
php 购物车的例子
May 04 PHP
php生成随机密码的三种方法小结
Sep 04 PHP
PHP开发的一些注意点总结
Oct 12 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
php设计模式之委托模式
Feb 13 PHP
PHP中串行化用法示例
Nov 16 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 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
使用GD库生成带阴影文字的图片
2015/03/27 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
Python库安装速度过慢解决方案
2020/07/14 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
最新销售员个人自荐信
2013/09/21 职场文书
计生工作先进事迹
2014/08/15 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
春节慰问简报
2015/07/21 职场文书
《角的度量》教学反思
2016/02/18 职场文书
创业计划书之废品回收
2019/09/26 职场文书
MySQL视图概念以及相关应用
2022/04/19 MySQL