重定向后获取主机的IP地址和HTTP状态

时间:2012-04-12 18:41:27

标签: php ssh http-status-codes

我正在构建一个小型网络应用程序,它将ping一组域并返回其状态,让我监视它们是否上升或下降,指向正确的服务器等。(live example that may or may not be working)< / p>

我开始使用exec("ping -n 3 -w 3 {$_POST['host']}", $output, $status);,现在正在使用exec("traceroute -w 1 {$_POST['host']}", $output, $status);并抓住最后一个$output并在那里匹配IP。

除了我注意到它没有遵循301重定向等之外,这大部分都有效。

例如myrayhawk.com上的traceroute产生类似于:

的内容
 1  192.168.1.1 (192.168.1.1)  0.495 ms  0.683 ms  0.911 ms
 2  10.71.96.1 (10.71.96.1)  32.220 ms  55.987 ms  57.109 ms
 3  ip68-4-12-93.oc.oc.cox.net (68.4.12.93)  58.231 ms  59.353 ms  60.424 ms
 4  68.4.15.242 (68.4.15.242)  72.339 ms  73.451 ms  74.641 ms
 5  ip68-4-11-16.oc.oc.cox.net (68.4.11.16)  76.265 ms  77.383 ms  79.591 ms
 6  ip68-4-11-94.oc.oc.cox.net (68.4.11.94)  143.201 ms  18.749 ms  41.717 ms
 7  langbprj01-ae1.rd.la.cox.net (68.1.1.13)  42.843 ms  43.971 ms  68.194 ms
 8  reserved.metro.la.ipv4.godaddy.com (206.223.123.32)  45.094 ms  70.501 ms  69.329 ms
 9  ip-97-74-253-94.ip.secureserver.net (97.74.253.94)  71.622 ms  72.754 ms  74.844 ms
10  ip-97-74-253-94.ip.secureserver.net (97.74.253.94)  108.322 ms  112.058 ms  109.446 ms

11  ip-97-74-253-98.ip.secureserver.net (97.74.253.98)  110.589 ms  37.376 ms  38.861 ms
12  ip-97-74-254-134.ip.secureserver.net (97.74.254.134)  68.868 ms  70.791 ms  72.282 ms
13  ip-184-168-86-185.ip.secureserver.net (184.168.86.185)  82.400 ms  76.183 ms  78.540 ms

但在rayhawk.com做同样的事情,因为我知道那里有301重定向:

 1  192.168.1.1 (192.168.1.1)  0.738 ms  0.868 ms  1.174 ms
 2  10.71.96.1 (10.71.96.1)  95.723 ms  119.914 ms  122.994 ms
 3  ip68-4-12-89.oc.oc.cox.net (68.4.12.89)  123.558 ms  124.115 ms  124.679 ms
 4  68.4.15.240 (68.4.15.240)  127.319 ms  127.933 ms  128.523 ms
 5  ip68-4-11-16.oc.oc.cox.net (68.4.11.16)  126.672 ms  132.373 ms  131.802 ms
 6  ip68-4-11-94.oc.oc.cox.net (68.4.11.94)  130.986 ms  65.913 ms  64.542 ms
 7  langbprj01-ae1.rd.la.cox.net (68.1.1.13)  89.395 ms  88.751 ms  88.113 ms
 8  reserved.metro.la.ipv4.godaddy.com (206.223.123.32)  97.840 ms  89.999 ms  90.593 ms
 9  po36.trma0202-01.bbn.mgmt.phx3.gdg (216.69.188.33)  98.454 ms  99.034 ms  115.921 ms
10  po36.trma0202-01.bbn.mgmt.phx3.gdg (216.69.188.33)  114.698 ms  114.032 ms  115.263 ms
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *

我尝试使用wget --spider hostname.com,但wget不喜欢在php exec()调用中很好地工作。

在普通SSH中执行wget时,我得到:

Resolving rayhawk.com... 72.167.131.159
Connecting to rayhawk.com|72.167.131.159|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.rayhawk.com/ [following]
Spider mode enabled. Check if remote file exists.
--2012-04-12 11:37:42--  http://www.rayhawk.com/
Resolving www.rayhawk.com... 72.167.131.159
Connecting to www.rayhawk.com|72.167.131.159|:80... connected.
HTTP request sent, awaiting response... 200 OK

然后可以解析我想要的东西。

如何解析主机的最终位置并在PHP中检索它的HTTP状态代码?

1 个答案:

答案 0 :(得分:1)

我写过一篇关于如何获取可能发生的HTTP重定向的博客文章,它带有代码示例:

http://example.com/的示例输出:

Status code (after all redirects): 200
Number of responses: 2 (1 Redirect(s))
* http://example.com/ -- 302 --> http://www.iana.org/domains/example/

您可以在the answer to a related question HTTP response code after redirect中找到更深入的代码讨论。