2012-06-15 94 views
2

我請檢查是否一幅幅是由一個HTTP 200 status code覈對和運行:curl_getinfo返回HTTP 200狀態碼不存在的網站

<?php 
$url = 'www.proxyserver-demo.com'; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_NOBODY, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_exec($ch); 
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 
if (200==$retcode) 
    { 
    echo "All's well"; 
    } 
else 
    { 
    echo "not so much"; 
    } 
?> 

每一個網站,但是我嘗試,甚至是不存在的人返回200 OK狀態,不失敗,這在不存在的情況下是不可能的。 (我的代碼總是輸出「一切順利」)

我的操作系統是Centos Linux,這裏可能是什麼問題?

+3

你可以找到你的答案在這個堆棧溢出職位: http://stackoverflow.com/questions/6541785/i-want-to-check-if-a-site-is-alive-在這個捲曲代碼內 – shawty

+0

你的代碼運行到哪個具體問題?看起來似乎缺少實際的問題。 – hakre

+0

的問題是,如果進入了一個非可用的網址,然後在DNS服務器重定向的URL opendns.com,我覺得這是我的問題。如何解決這個問題?並使用curl時避免重定向? –

回答

5

抱歉濫用答案領域的東西應該可能是一個評論,但我真的不能想到一種方式來正確呈現此信息,否則。我真的不知道如何將他們的意見轉換成任何正確顯示和格式化的形狀。 : - |

無論如何,因爲你的代碼應該可以正常工作,但是對於你來說,當你檢查一個HTTP響應時,它總是回調「一切正常」,這可能是你的ISP正在做DNS-highjacking,這基本上是返回假的IP地址數據,將您重定向到他們自己的服務器,通常是爲了在用戶友好的僞裝下獲得貨幣收益。 (顯示「此頁面不存在」的ISP頁面與廣告或域註冊等服務提供結合在一起)。

一個簡單的測試方法就是使用應用程序請求DNS數據如dig。查詢到正常工作的DNS服務器不存在的域名應該返回NXDOMAIN其狀態:

所以當我們檢查一個完全假的域notexisting.fake用下面的命令: dig A notexisting.fake.,這是它通常應該給:

[email protected]_Gate:~$ dig A notexisting.fake. 

; <<>> DiG 9.7.3 <<>> A notexisting.fake. 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 28725 
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 

;; QUESTION SECTION: 
;notexisting.fake.    IN  A 

;; AUTHORITY SECTION: 
.      1780 IN  SOA  a.root-servers.net. nstld.verisign-grs.com. 2012061700 1800 900 604800 86400 

;; Query time: 24 msec 
;; SERVER: 8.8.8.8#53(8.8.8.8) 
;; WHEN: Sun Jun 17 18:05:10 2012 
;; MSG SIZE rcvd: 109 

,你可以看到,要求notexisting.fake.返回美國

;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 28725 

當我們爲google.com查詢而這個不存在的域,與dig A google.com.

[email protected]_Gate:~$ dig A google.com. 

; <<>> DiG 9.7.3 <<>> A google.com. 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13223 
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 

;; QUESTION SECTION: 
;google.com.     IN  A 

;; ANSWER SECTION: 
google.com.    300  IN  A  74.125.132.138 
google.com.    300  IN  A  74.125.132.139 
google.com.    300  IN  A  74.125.132.101 
google.com.    300  IN  A  74.125.132.113 
google.com.    300  IN  A  74.125.132.100 
google.com.    300  IN  A  74.125.132.102 

;; Query time: 29 msec 
;; SERVER: 8.8.8.8#53(8.8.8.8) 
;; WHEN: Sun Jun 17 18:05:20 2012 
;; MSG SIZE rcvd: 124 

我們的查詢返回我們正確NOERROR

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13223 
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 

,並返回我們發現A記錄的IP地址

;; ANSWER SECTION: 
google.com.    300  IN  A  74.125.132.138 
google.com.    300  IN  A  74.125.132.139 
google.com.    300  IN  A  74.125.132.101 
google.com.    300  IN  A  74.125.132.113 
google.com.    300  IN  A  74.125.132.100 
google.com.    300  IN  A  74.125.132.102 

因此,如果您對假域名查詢返回IP地址,那麼你知道問題出在你的DNS上,你的ISP無疑會將每一個不存在的請求重定向到他們自己的服務器上,因爲你會得到一個「我的網站上的策略」 200 OK狀態,但它實際上來自冒名頂替者。

如果是這種情況,那麼你只能:

  • 改變你的DNS服務器:使用Google Public DNS(8.8.8.8 8.8.4.4和)或opendns(208.67.222.222和208.67.220.220)
  • 請求/抱怨您的isp讓他們更改此策略或爲您提供您自己的非重定向DNS服務器
  • 如果您的網絡允許,請運行您自己的專用DNS服務器以進行個人查詢。
相關問題