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

同一域名对应多个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");
?>
分享到:
评论

相关推荐

    判断两个ip号是否在同一网段

    以下是一个简单的C#函数示例,用于判断两个IP地址是否在同一网段: ```csharp using System.Net; public bool IsSameSubnet(IPAddress ip1, IPAddress ip2, IPAddress subnetMask) { byte[] ip1Bytes = ip1....

    获取远程HTML网页内容

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

    Python实现通过解析域名获取ip地址的方法分析

    在某些情况下,一个域名可能会对应多个 IP 地址,此时我们需要获取所有解析出来的 IP 地址。 **示例代码**: ```python import socket def get_ip_list(domain): ip_list = [] try: addrs = socket.get...

    PHP 获取远程网页内容的代码(fopen,curl已测)

    fopen()函数原本用于打开文件,但当指定的文件路径是一个URL时,PHP会尝试以HTTP协议打开这个URL,从而获取远程网页内容。这使得开发者可以利用简单的文件操作函数来处理远程内容。例如,下面的代码展示了如何使用...

    ip地址查询可查域名ip php源码

    标题中的“ip地址查询可查域名ip php源码”指的是一个使用PHP编程语言编写的程序,它可以查询IP地址并解析对应的域名。这个程序允许开发者进行二次开发,以便根据实际需求进行定制,比如添加新的功能或者优化性能。...

    根据ip进行域名跳转

    当用户在浏览器中输入域名时,DNS(域名系统)会将域名转换为对应的IP地址,从而找到目标服务器。 在“根据ip进行域名跳转”的场景中,服务器需要能够识别来访用户的IP地址,并据此做出不同的响应。这通常涉及到...

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

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

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

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

    通过matlab读取同一路径下多个txt或者mat文件

    在MATLAB中,读取同一路径下的多个TXT或MAT文件是一项常见的任务,特别是在数据分析和处理项目中。MATLAB提供了一系列的内置函数,使得这个过程变得简单而高效。下面将详细介绍如何利用MATLAB来完成这个任务。 首先...

    pb获取ip地址/mac地址

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

    powerbuilder获取本地IP地址或主机名

    在PowerBuilder中获取本地IP地址或主机名是一个常见的需求,特别是在开发网络应用程序时。PowerBuilder是一种流行的第四代编程语言(4GL),它提供了一个集成的开发环境(IDE)用于创建数据库驱动的应用程序。在这个...

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

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

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

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

    两IP是否在同一个网段

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

    PHP实例开发源码——同IP站点查询代码.zip

    PHP中的`gethostbyaddr()`函数可以用于根据IP地址获取对应的主机名,而`gethostbyname()`函数则相反,将域名转换为IP。通过这些函数,我们可以找出哪些域名与特定IP相关联。 2. **HTTP请求**:可能使用了PHP的`file...

    VB6.0获取本机IP地址和计算机名

    1. **GetHostByName**:这是Winsock库中的一个函数,用于通过主机名获取IP地址。在VB6.0中,我们首先需要加载Winsock控件,然后调用此函数。 2. **GetComputerName**:这是一个系统API函数,用于获取当前计算机的...

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

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

    GeoIP地址库,用于查找对应IP地址对应的国家,城市

    例如,`GeoIP_city_by_ip()`函数用于获取指定IP地址的城市信息。 3. `GeoIPCity.dat索引文件`:为了提高查询效率,GeoIP数据库通常会有一个索引文件,它帮助快速定位到目标IP地址的记录。 4. `示例程序`:可能包含...

    易语言源码本机IP地址、子网掩码、DNS服务器地址设置.rar

    当我们在浏览器中输入网址时,计算机就会向DNS服务器发送查询请求,获取对应的IP地址,从而能够访问目标网站。 这个易语言源码实现的功能包括: 1. 获取本机IP地址:程序会调用操作系统提供的API接口,如Windows的...

    C#获取局域网内所有联网设备的IP地址和MAC地址

    接着,通过`GetIPProperties()`方法获取每个接口的IP属性,从中提取IP地址信息。以下是一个简单的示例代码片段: ```csharp using System.Net.NetworkInformation; foreach (NetworkInterface ni in Network...

Global site tag (gtag.js) - Google Analytics