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地址并解析对应的域名。这个程序允许开发者进行二次开发,以便根据实际需求进行定制,比如添加新的功能或者优化性能。...
例如,在Python中,可以使用`socket`库的`gethostbyname()`函数来获取域名对应的IP地址: ```python import socket ip_address = socket.gethostbyname('www.google.com') print(ip_address) ``` 总结,掌握如何...
本项目"opencv多视频同一窗口显示C++程序"旨在实现一个功能,即在一个窗口中同时播放两个视频,并将这两个视频流合并成一个新的视频文件。 首先,要实现这个功能,你需要对C++编程语言有扎实的基础,同时也需要了解...
使用此类DLL时,需要在PowerBuilder中创建一个外部函数引用,然后调用相应的函数来获取所需信息。 5. **app.pbl**: 这是一个PowerBuilder的库文件,可能包含了获取IP和MAC地址的相关代码和对象。在PowerBuilder中...
在MATLAB中,读取同一路径下的多个TXT或MAT文件是一项常见的任务,特别是在数据分析和处理项目中。MATLAB提供了一系列的内置函数,使得这个过程变得简单而高效。下面将详细介绍如何利用MATLAB来完成这个任务。 首先...
通过上述方法,你可以在MATLAB中灵活地绘制多个数据集在同一图表上,无论是通过基本的plot函数,还是使用hold on/off命令、subplot命令,或是更先进的tiledlayout和nexttile函数。这些工具和技巧将帮助你更有效地...
在PowerBuilder中获取本地IP地址或主机名是一个常见的需求,特别是在开发网络应用程序时。PowerBuilder是一种流行的第四代编程语言(4GL),它提供了一个集成的开发环境(IDE)用于创建数据库驱动的应用程序。在这个...
3. 在`LoginSum`函数中,查询`Login`表中对应用户ID的记录数。如果记录数小于`User_LoginSum`,则可以创建新的登录记录,更新`Login_RefreshTime`为当前时间,并设置一个公共变量`LoginTrue`为`True`,表示登录成功...
判断两个IP是否属于同一个子网(java) 简单代码
"基于PHP的同IP站点查询代码"是一个项目,它允许开发者通过PHP来实现对同一IP地址下托管的多个网站的查询功能。这种功能对于网络管理员、SEO专家或任何需要分析网络资源分布的人士都非常有用。通过这样的代码,用户...
例如,`GeoIP_city_by_ip()`函数用于获取指定IP地址的城市信息。 3. `GeoIPCity.dat索引文件`:为了提高查询效率,GeoIP数据库通常会有一个索引文件,它帮助快速定位到目标IP地址的记录。 4. `示例程序`:可能包含...
在获取远程主机的IP地址和主机名时,可能需要建立实际的网络连接或者使用DNS查询。 总的来说,PB11.5提供了丰富的功能来处理网络通信,包括获取IP地址和主机名。通过合理利用系统API和Socket对象,开发者可以构建...
当我们在浏览器中输入网址时,计算机就会向DNS服务器发送查询请求,获取对应的IP地址,从而能够访问目标网站。 这个易语言源码实现的功能包括: 1. 获取本机IP地址:程序会调用操作系统提供的API接口,如Windows的...
接着,通过`GetIPProperties()`方法获取每个接口的IP属性,从中提取IP地址信息。以下是一个简单的示例代码片段: ```csharp using System.Net.NetworkInformation; foreach (NetworkInterface ni in Network...
标题中的“npapi插件中插件主动调网页js函数”指的是NPAPI(Netscape Plugin Application Programming Interface)插件如何在运行时调用网页中的JavaScript函数。NPAPI是一种允许浏览器加载外部代码来扩展功能的插件...
通过以上分析,我们可以看到这个简单的小函数是如何利用C++语言和Windows平台的特性来实现获取本机外网IP地址的功能的。虽然代码较为简洁,但在实际开发中还需结合具体应用场景进行适当扩展和优化。