`
hudeyong926
  • 浏览: 2032891 次
  • 来自: 武汉
社区版块
存档分类
最新评论

同一域名对应多个IP时,PHP获取远程网页内容的函数

阅读更多

PHP获取远程网页内容有多种方式,例如用自带的file_get_contents、fopen等函数。

<?php  
echo file_get_contents("http://blog.s135.com/abc.php");  
?>

 但是,在DNS轮询等负载均衡中,同一域名,可能对应多台服务器,多个IP。假设blog.s135.com被DNS解析到 72.249.146.213、72.249.146.214、72.249.146.215三个IP,用户每次访问blog.s135.com,系统会 根据负载均衡的相应算法访问其中的一台服务器。

  上周做一个视频项目时,就碰到这样一类需求:需要依次访问每台服务器上的一个PHP接口程序(假设为abc.php),查询这台服务器的传输状态。

  这时就不能直接用file_get_contents访问http://blog.s135.com/abc.php 了,因为它可能一直重复访问某一台服务器。

  而采用依次访问http://72.249.146.213/abc.phphttp://72.249.146.214/abc.phphttp://72.249.146.215/abc.php 的方法,在这三台服务器上的Web Server配有多个虚拟主机时,也是不行的。

  通过设置本地hosts也不行,因为hosts不能设置多个IP对应同一个域名。

  那就只有通过PHP和HTTP协议来实现:访问abc.php时,在header头中加上blog.s135.com域名。于是,我写了下面这个PHP函数:

<?php
/************************
* 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容
* 创建时间:2008-12-09
* 创建人:张宴(blog.s135.com)
* 参数说明:
*    $ip   服务器的IP地址
*    $host   服务器的host名称
*    $url   服务器的URL地址(不含域名)
* 返回值:
*    获取到的远程网页内容
*    false   访问远程网页失败
************************/
function HttpVisit($ip, $host, $url)   
{   
    $errstr = '';   
    $errno = '';
    $fp = fsockopen ($ip, 80, $errno, $errstr, 90);
    if (!$fp)   
    {   
         return false;   
    }   
    else  
    {   
        $out = "GET {$url} HTTP/1.1\r\n";
        $out .= "Host:{$host}\r\n";   
        $out .= "Connection: close\r\n\r\n";
        fputs ($fp, $out);   

        while($line = fread($fp, 4096)){
           $response .= $line;
        }
        fclose( $fp );

        //去掉Header头信息
        $pos = strpos($response, "\r\n\r\n");
        $response = substr($response, $pos + 4);
    
        return $response;   
    }   
}

//调用方法:
$server_info1 = HttpVisit("72.249.146.213", "blog.s135.com", "/abc.php");
$server_info2 = HttpVisit("72.249.146.214", "blog.s135.com", "/abc.php");
$server_info3 = HttpVisit("72.249.146.215", "blog.s135.com", "/abc.php");
?>
分享到:
评论

相关推荐

    获取远程HTML网页内容

    在IT行业中,获取远程HTML网页内容是网络编程中常见的任务之一,主要涉及到HTTP协议和Web客户端的实现。这里我们将深入探讨如何使用C语言编写源代码来实现这一功能,同时也会提及到与之相关的标签和文件。 首先,让...

    php获取远程文件内容的函数

    在PHP编程中,获取远程文件内容是一个常见的任务。...以上就是PHP获取远程文件内容函数的主要知识点,通过这个函数,可以方便地在PHP项目中实现远程数据的下载和处理,希望对学习PHP程序设计的读者有所帮助。

    PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例

    curl获取远程文件内容 GD显示中文 PHP GIF动画生成类 PHP HTML转UBB函数 PHP XML转数组函数 PHP 缓存函数 PHP 设置COOKIE,并且加密COOKIE函数 PHP不缓存数据头 PHP伪造IP PHP全角半角转换函数 PHP农历...

    asp获取远程网页的指定内容的实现代码

    需要注意的是,获取远程网页内容时应该遵守相关网站的robots.txt规则,以及考虑版权和隐私保护法律。未经授权的数据抓取可能涉及侵权或违反法律的行为,因此在实际应用中应当谨慎对待,并尊重目标网站的规则和用户的...

    利用MFC实现域名到IP地址的自动转换

    当我们输入一个网站的域名时,浏览器会通过DNS服务查找对应的IP地址,以便与服务器建立连接。这个过程通常由操作系统底层的网络堆栈自动完成,但通过编程我们可以自定义这个过程。 在MFC中实现域名到IP地址的转换,...

    opencv多视频同一窗口显示C++程序

    本项目"opencv多视频同一窗口显示C++程序"旨在实现一个功能,即在一个窗口中同时播放两个视频,并将这两个视频流合并成一个新的视频文件。 首先,要实现这个功能,你需要对C++编程语言有扎实的基础,同时也需要了解...

    pb获取ip地址/mac地址

    使用此类DLL时,需要在PowerBuilder中创建一个外部函数引用,然后调用相应的函数来获取所需信息。 5. **app.pbl**: 这是一个PowerBuilder的库文件,可能包含了获取IP和MAC地址的相关代码和对象。在PowerBuilder中...

    一个PHP Whois域名检查函数代码_.docx

    该资源提供了一个包含多个域名后缀对应的查询服务器的数组,如 .com 对应 whois.internic.net、.us 对应 whois.nic.us 等。 知识点5:fsockopen 函数 该资源使用了 PHP 的 fsockopen 函数来连接查询服务器。...

    OpenCV实现同一窗口显示多幅图片

    在OpenCV库中,显示图像是一项基本操作,而如何在同一窗口显示多幅图片则涉及到图像处理和用户界面设计。在本教程中,我们将探讨如何利用OpenCV 2.4.2版本和Visual Studio 2008来实现这一功能。首先,我们需要了解...

    两IP是否在同一个网段

    本文将详细讨论如何判断两个IP地址是否属于同一网段,以及如何使用C#编程语言来实现这一功能。 首先,我们需要了解IP地址的结构。IP地址通常由四个八位字节组成,每个字节范围为0到255,之间用点号分隔,例如192....

    域名IP转换源代码(VC6)

    用户可能输入一个域名,程序则输出对应的IP地址。 为了进一步优化这个程序,可以考虑以下几点: - 异步DNS查询:使用`getaddrinfo`函数配合异步套接字操作,提高程序响应性。 - 错误处理:增加对各种可能出现的...

    限定同一用户名同一时间登录个数的解决方案收藏

    3. 在`LoginSum`函数中,查询`Login`表中对应用户ID的记录数。如果记录数小于`User_LoginSum`,则可以创建新的登录记录,更新`Login_RefreshTime`为当前时间,并设置一个公共变量`LoginTrue`为`True`,表示登录成功...

    php判断IP为国内国外

    - 在`index.php`中,可能会有一个函数或方法,如`isIpInChina($ip)`,它首先使用`ip2long()`将IP地址转换为数字,然后调用`iplimit.class.php`中的方法查询`ipdata.db`,最后根据查询结果判断IP地址是否属于中国。...

    VC++ 添加IP,多个IP,路由表

    通过遍历`GetAdaptersInfo`或`GetAdaptersAddresses`函数获取所有网络接口的信息,然后对每个接口调用`AddIPAddress`或其他相关函数进行IP配置。 5. **路由表操作**: 路由表决定了数据包如何从本地计算机发送到...

    域名转换成IP地址

    在这个代码中,`gethostbyname()`函数接收一个域名作为参数,然后返回该域名对应的IP地址。如果发生错误(如域名不存在或网络问题),它会抛出一个`socket.gaierror`异常,程序可以通过捕获这个异常来处理错误情况。...

    获取主机名和MAC.rar_MAC地址_域名 解析_获取mac地址_获取对方IP_通过ip 获取主机

    调用win32api的函数,通过ip地址获取对方的MAC地址,使用.netframework的域名解析函数获取对方的主机名

    Get Local IP (VB6.0获取本地IP)

    在VB6.0环境下,获取本地IP地址是一个常见的任务,特别是在开发网络应用程序时。本地IP地址是计算机在局域网或互联网上的唯一标识符,它允许设备之间进行通信。本教程将详细介绍如何利用Visual Basic 6.0和Windows ...

    DNS 解析协议 c 函数, 实例, 方便构造自己的非阻塞解析函数, 适用于任何平台

    DNS(Domain Name System)是互联网上的一项核心服务,它负责将域名转换为对应的IP地址,以便于用户通过易记的域名访问网站或服务。在IT领域,理解和掌握DNS解析协议对于网络编程至关重要,特别是当你需要编写自定义...

    同一页面多种Tab及滑动门应用的综合实例

    这个问题以前用户就提到过,不知如何在同一页面布置多个选项卡,你可以参考一下这个。  1、支持一个页面多次引用;  2、一次引用实现多次切换;  3、点击/滑过等切换方式自定义;  4、自动播放+鼠标动作切换...

Global site tag (gtag.js) - Google Analytics