php实现httpRequest的方法_php技巧

本文实例讲述了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程序设计有所帮助。

时间: 2024-10-29 14:14:05

php实现httpRequest的方法_php技巧的相关文章

用PHP实现多服务器共享SESSION数据的方法_php技巧

PHP 实现多服务器共享 SESSION 数据 /google 的广告条--> 一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使用的.各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接口对用户数据进行访问即可.但还存在一个问题,就是用户在这个服务器登录之后,进入另一个服务器的别的模块时,仍然需要重新登录,这

PHP读取PPT文件的方法_php技巧

本文实例讲述了PHP读取PPT文件的方法.分享给大家供大家参考,具体如下: 最近做一个和FLASH有关的东西,其中就要用到在网站上看PPT就像百度,豆丁网那样可以直接在网站上读,在网上搜了半天没搜到,都是些什么安装个软件什么的,PHP网站放到空间上,谁能让你在哪装软件呢?不是在瞎扯么?不过还好,最后在国外一个网站上搜到了一个解决思路,就是一个PHP操作PPT的类,当然这个网站还提供了操作OFFICES软件的其他类,不过是2007版的OFFICES,现把网址贴出来奉献给大家:http://phpp

win7安装php框架Yii的方法_php技巧

本文讲述了win7安装php框架Yii的方法.分享给大家供大家参考,具体如下: 有人问我win7安装yii老是报错,花了10分钟装了一下,现在做程序的自学能力这么差了?我对框架这些东西不是很感冒,框架这类东西,个人觉得效率都不咋地,集成的东西多,并且有很多我们并不需要.如果自己没有开发过框架的话,用框架还是有些好处的,可以规范代码. 1.下载yii http://www.yiiframework.com/download/ 2.使用yiic来生成web目录 C:\Windows\system32

PHP实现获取图片颜色值的方法_php技巧

本例讲述了PHP实现获取图片颜色值的方法,PHP获取图片颜色值检测图片主要颜色是通过imagecreatefromjpeg函数读取图片,再循环获得各个颜色值加以计算实现的. 具体代码如下: <?php $i=imagecreatefromjpeg("photo3.jpg");//测试图片,自己定义一个,注意路径 for ($x=0;$x<imagesx($i);$x++) { for ($y=0;$y<imagesy($i);$y++) { $rgb = imagec

PHP接收App端发送文件流的方法_php技巧

本文实例讲述了PHP接收App端发送文件流的方法.分享给大家供大家参考,具体如下: 解决思路: 1. 客户端多张图片进行循环上传,同时附带参数,并用一定规则组合生产数据流(图片数据放在最后) 2. 使用数据流进行传输,php服务端用file_get_content('php://input')进行接收 3. 传输完毕后将数据流按照规则分割,取出最后的图片数据,并写入图片文件 示例代码: 以下代码是发送单张图片和参数PHP文件,多张图片可循环调用. <?php /* curl_post.php *

php版微信公众平台回复中文出现乱码问题的解决方法_php技巧

本文实例分析了php版微信公众平台回复中文出现乱码问题的解决方法.分享给大家供大家参考,具体如下: 微信公众平开发时碰到回复中文乱码了,这个问题小编发现是编码问题,其实只要把编码转成utf8就可以解决了,具体来看看. 很多微信公众平台的自动回复程序都是 ThinkWechat.class.php 这个类开发的,今天碰到一个莫名其妙的乱码问题,查问题发现是GB2312编码导致,所以要修改源码. 先增加一个方法: /** * 检测是否UTF-8 * @param $str * @return boo

PHP实现对二维数组某个键排序的方法_php技巧

本文实例讲述了PHP实现对二维数组某个键排序的方法.分享给大家供大家参考,具体如下: /** * 对查询结果集进行排序 * @access public * @param array $list 查询结果 * @param string $field 排序的字段名 * @param string $sortby 排序类型 (asc正向排序 desc逆向排序 nat自然排序) * @return array */ function list_sort_by($list, $field, $sort

PHP自定义函数实现格式化秒的方法_php技巧

本文实例讲述了PHP自定义函数实现格式化秒的方法.分享给大家供大家参考,具体如下: function vtime($time) { $output = ''; foreach (array(86400 => '天', 3600 => '小时', 60 => '分', 1 => '秒') as $key => $value) { if ($time >= $key) $output .= floor($time/$key) . $value; $time %= $key;

PHP简单检测网址是否能够正常打开的方法_php技巧

本文实例讲述了PHP简单检测网址是否能够正常打开的方法.分享给大家供大家参考,具体如下: 这是一个检测网址是否能正常打开的PHP代码,通过下面的代码检测一个网址是否能正常访问,如果正常则会返回http状态码200的值,如果为其它则不正常:这个代码我们可以用到很多地方,例如缓存友情链接的ICO图标时就可以用到,缓存时先检测网站是否正常,如果正常就缓存ICO图标,否则调用一个默认的图标文件. 代码如下: <?php /* * Created on 2016-9-4 * */ function htt