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");
?>
分享到:
相关推荐
在IT行业中,获取远程HTML网页内容是网络编程中常见的任务之一,主要涉及到HTTP协议和Web客户端的实现。这里我们将深入探讨如何使用C语言编写源代码来实现这一功能,同时也会提及到与之相关的标签和文件。 首先,让...
在PHP编程中,获取远程文件内容是一个常见的任务。...以上就是PHP获取远程文件内容函数的主要知识点,通过这个函数,可以方便地在PHP项目中实现远程数据的下载和处理,希望对学习PHP程序设计的读者有所帮助。
curl获取远程文件内容 GD显示中文 PHP GIF动画生成类 PHP HTML转UBB函数 PHP XML转数组函数 PHP 缓存函数 PHP 设置COOKIE,并且加密COOKIE函数 PHP不缓存数据头 PHP伪造IP PHP全角半角转换函数 PHP农历...
需要注意的是,获取远程网页内容时应该遵守相关网站的robots.txt规则,以及考虑版权和隐私保护法律。未经授权的数据抓取可能涉及侵权或违反法律的行为,因此在实际应用中应当谨慎对待,并尊重目标网站的规则和用户的...
当我们输入一个网站的域名时,浏览器会通过DNS服务查找对应的IP地址,以便与服务器建立连接。这个过程通常由操作系统底层的网络堆栈自动完成,但通过编程我们可以自定义这个过程。 在MFC中实现域名到IP地址的转换,...
本项目"opencv多视频同一窗口显示C++程序"旨在实现一个功能,即在一个窗口中同时播放两个视频,并将这两个视频流合并成一个新的视频文件。 首先,要实现这个功能,你需要对C++编程语言有扎实的基础,同时也需要了解...
使用此类DLL时,需要在PowerBuilder中创建一个外部函数引用,然后调用相应的函数来获取所需信息。 5. **app.pbl**: 这是一个PowerBuilder的库文件,可能包含了获取IP和MAC地址的相关代码和对象。在PowerBuilder中...
该资源提供了一个包含多个域名后缀对应的查询服务器的数组,如 .com 对应 whois.internic.net、.us 对应 whois.nic.us 等。 知识点5:fsockopen 函数 该资源使用了 PHP 的 fsockopen 函数来连接查询服务器。...
在OpenCV库中,显示图像是一项基本操作,而如何在同一窗口显示多幅图片则涉及到图像处理和用户界面设计。在本教程中,我们将探讨如何利用OpenCV 2.4.2版本和Visual Studio 2008来实现这一功能。首先,我们需要了解...
本文将详细讨论如何判断两个IP地址是否属于同一网段,以及如何使用C#编程语言来实现这一功能。 首先,我们需要了解IP地址的结构。IP地址通常由四个八位字节组成,每个字节范围为0到255,之间用点号分隔,例如192....
用户可能输入一个域名,程序则输出对应的IP地址。 为了进一步优化这个程序,可以考虑以下几点: - 异步DNS查询:使用`getaddrinfo`函数配合异步套接字操作,提高程序响应性。 - 错误处理:增加对各种可能出现的...
3. 在`LoginSum`函数中,查询`Login`表中对应用户ID的记录数。如果记录数小于`User_LoginSum`,则可以创建新的登录记录,更新`Login_RefreshTime`为当前时间,并设置一个公共变量`LoginTrue`为`True`,表示登录成功...
- 在`index.php`中,可能会有一个函数或方法,如`isIpInChina($ip)`,它首先使用`ip2long()`将IP地址转换为数字,然后调用`iplimit.class.php`中的方法查询`ipdata.db`,最后根据查询结果判断IP地址是否属于中国。...
通过遍历`GetAdaptersInfo`或`GetAdaptersAddresses`函数获取所有网络接口的信息,然后对每个接口调用`AddIPAddress`或其他相关函数进行IP配置。 5. **路由表操作**: 路由表决定了数据包如何从本地计算机发送到...
在这个代码中,`gethostbyname()`函数接收一个域名作为参数,然后返回该域名对应的IP地址。如果发生错误(如域名不存在或网络问题),它会抛出一个`socket.gaierror`异常,程序可以通过捕获这个异常来处理错误情况。...
调用win32api的函数,通过ip地址获取对方的MAC地址,使用.netframework的域名解析函数获取对方的主机名
在VB6.0环境下,获取本地IP地址是一个常见的任务,特别是在开发网络应用程序时。本地IP地址是计算机在局域网或互联网上的唯一标识符,它允许设备之间进行通信。本教程将详细介绍如何利用Visual Basic 6.0和Windows ...
DNS(Domain Name System)是互联网上的一项核心服务,它负责将域名转换为对应的IP地址,以便于用户通过易记的域名访问网站或服务。在IT领域,理解和掌握DNS解析协议对于网络编程至关重要,特别是当你需要编写自定义...
这个问题以前用户就提到过,不知如何在同一页面布置多个选项卡,你可以参考一下这个。 1、支持一个页面多次引用; 2、一次引用实现多次切换; 3、点击/滑过等切换方式自定义; 4、自动播放+鼠标动作切换...