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做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
用PHP代码给图片加水印
Jul 01 PHP
php面向对象编程self和static的区别
May 08 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 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
php中文本数据翻页(留言本翻页)
2006/10/09 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
Python3基础之list列表实例解析
2014/08/13 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
2019/04/29 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
Python如何给函数库增加日志功能
2020/08/04 Python
python如何实现递归转非递归
2021/02/25 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
自我评价怎么写好呢?
2013/12/05 职场文书
优秀团队获奖感言
2014/02/19 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python