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.php
、http://72.249.146.214/abc.php
、http://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");
?>
分享到:
相关推荐
以下是一个简单的C#函数示例,用于判断两个IP地址是否在同一网段: ```csharp using System.Net; public bool IsSameSubnet(IPAddress ip1, IPAddress ip2, IPAddress subnetMask) { byte[] ip1Bytes = ip1....
在IT行业中,获取远程HTML网页内容是网络编程中常见的任务之一,主要涉及到HTTP协议和Web客户端的实现。这里我们将深入探讨如何使用C语言编写源代码来实现这一功能,同时也会提及到与之相关的标签和文件。 首先,让...
在某些情况下,一个域名可能会对应多个 IP 地址,此时我们需要获取所有解析出来的 IP 地址。 **示例代码**: ```python import socket def get_ip_list(domain): ip_list = [] try: addrs = socket.get...
fopen()函数原本用于打开文件,但当指定的文件路径是一个URL时,PHP会尝试以HTTP协议打开这个URL,从而获取远程网页内容。这使得开发者可以利用简单的文件操作函数来处理远程内容。例如,下面的代码展示了如何使用...
标题中的“ip地址查询可查域名ip php源码”指的是一个使用PHP编程语言编写的程序,它可以查询IP地址并解析对应的域名。这个程序允许开发者进行二次开发,以便根据实际需求进行定制,比如添加新的功能或者优化性能。...
当用户在浏览器中输入域名时,DNS(域名系统)会将域名转换为对应的IP地址,从而找到目标服务器。 在“根据ip进行域名跳转”的场景中,服务器需要能够识别来访用户的IP地址,并据此做出不同的响应。这通常涉及到...
本项目"opencv多视频同一窗口显示C++程序"旨在实现一个功能,即在一个窗口中同时播放两个视频,并将这两个视频流合并成一个新的视频文件。 首先,要实现这个功能,你需要对C++编程语言有扎实的基础,同时也需要了解...
该资源提供了一个包含多个域名后缀对应的查询服务器的数组,如 .com 对应 whois.internic.net、.us 对应 whois.nic.us 等。 知识点5:fsockopen 函数 该资源使用了 PHP 的 fsockopen 函数来连接查询服务器。...
在MATLAB中,读取同一路径下的多个TXT或MAT文件是一项常见的任务,特别是在数据分析和处理项目中。MATLAB提供了一系列的内置函数,使得这个过程变得简单而高效。下面将详细介绍如何利用MATLAB来完成这个任务。 首先...
使用此类DLL时,需要在PowerBuilder中创建一个外部函数引用,然后调用相应的函数来获取所需信息。 5. **app.pbl**: 这是一个PowerBuilder的库文件,可能包含了获取IP和MAC地址的相关代码和对象。在PowerBuilder中...
在PowerBuilder中获取本地IP地址或主机名是一个常见的需求,特别是在开发网络应用程序时。PowerBuilder是一种流行的第四代编程语言(4GL),它提供了一个集成的开发环境(IDE)用于创建数据库驱动的应用程序。在这个...
在OpenCV库中,显示图像是一项基本操作,而如何在同一窗口显示多幅图片则涉及到图像处理和用户界面设计。在本教程中,我们将探讨如何利用OpenCV 2.4.2版本和Visual Studio 2008来实现这一功能。首先,我们需要了解...
3. 在`LoginSum`函数中,查询`Login`表中对应用户ID的记录数。如果记录数小于`User_LoginSum`,则可以创建新的登录记录,更新`Login_RefreshTime`为当前时间,并设置一个公共变量`LoginTrue`为`True`,表示登录成功...
本文将详细讨论如何判断两个IP地址是否属于同一网段,以及如何使用C#编程语言来实现这一功能。 首先,我们需要了解IP地址的结构。IP地址通常由四个八位字节组成,每个字节范围为0到255,之间用点号分隔,例如192....
PHP中的`gethostbyaddr()`函数可以用于根据IP地址获取对应的主机名,而`gethostbyname()`函数则相反,将域名转换为IP。通过这些函数,我们可以找出哪些域名与特定IP相关联。 2. **HTTP请求**:可能使用了PHP的`file...
1. **GetHostByName**:这是Winsock库中的一个函数,用于通过主机名获取IP地址。在VB6.0中,我们首先需要加载Winsock控件,然后调用此函数。 2. **GetComputerName**:这是一个系统API函数,用于获取当前计算机的...
调用win32api的函数,通过ip地址获取对方的MAC地址,使用.netframework的域名解析函数获取对方的主机名
例如,`GeoIP_city_by_ip()`函数用于获取指定IP地址的城市信息。 3. `GeoIPCity.dat索引文件`:为了提高查询效率,GeoIP数据库通常会有一个索引文件,它帮助快速定位到目标IP地址的记录。 4. `示例程序`:可能包含...
当我们在浏览器中输入网址时,计算机就会向DNS服务器发送查询请求,获取对应的IP地址,从而能够访问目标网站。 这个易语言源码实现的功能包括: 1. 获取本机IP地址:程序会调用操作系统提供的API接口,如Windows的...
接着,通过`GetIPProperties()`方法获取每个接口的IP属性,从中提取IP地址信息。以下是一个简单的示例代码片段: ```csharp using System.Net.NetworkInformation; foreach (NetworkInterface ni in Network...