2011-11-29 46 views
1

我已經使用這個代碼來打開whatismyipaddress.com的fsockopen有錯誤:HTTP/1.1 301永久移動和404

$fp = fsockopen("whatismyipaddress.com", 80, $errno, $errstr, 5); 

if ($fp) { 
    $url = "/"; 

    fputs($fp, "GET $url HTTP/1.1\r\nHost: {whatismyipaddress.com}\r\nConnection: close\r\n\r\n"); 
    $resp = ''; 

    while(!feof($fp)) { 
     $resp .= fgets($fp, 1024); 
    } 

    echo "$resp"; 
} 

,我總能看到這個錯誤

HTTP/1.1 301永久日期感動:2011年11月29日星期二20:19:36 GMT服務器:Apache/2.2.17(Unix)DAV/2位置:http://whatismyipaddress.com/ MS-Author-Via:DAV Content-Length:0連接:close Content-Type:text/html

此外,我已經使用這個代碼來打開whatismyipaddress.com/proxy-check

$fp = fsockopen("whatismyipaddress.com", 80, $errno, $errstr, 5); 

if ($fp) { 
    $url = "/proxy-check"; 

    fputs($fp, "GET $url HTTP/1.1\r\nHost: {whatismyipaddress.com}\r\nConnection: close\r\n\r\n"); 
    $resp = ''; 

    while(!feof($fp)) { 
     $resp .= fgets($fp, 1024); 
    } 

    echo "$resp"; 
} 

,並有此錯誤

HTTP/1.1 404未找到日期:星期二,2011 11月29日20時32分07秒格林尼治標準時間服務器:Apache/2.2.17(Unix)DAV/2 Content-Length:421連接:close Content-Type:text/html; charset = iso-8859-1 未找到

在此服務器上找不到請求的URL /代理檢查。

此外,嘗試使用ErrorDocument處理請求時遇到404未找到錯誤。 的Apache/2.2.17(Unix的)DAV/2 {} whatismyipaddress.com端口服務器80

我敢肯定,沒有與代碼任何問題。我已經測試了很多網站,我沒有得到任何問題

請任何人都可以解釋這個問題?

謝謝。

+0

嘗試'http:// whatismyipaddress.com'(使用http://) –

+1

刪除請求中'Host:'標題中圍繞域名的'{}'。 – DaveRandom

+0

請從http://whatismyipaddress.com/terms-of-use注意:「未經事先書面許可,您不得以自動方式使用腳本,代理,應用程序或以其他方式查詢本網站。」 – 2011-11-29 21:53:33

回答

1

基本上你的腳本工作正常。有一些錯誤。一個是專門針對HTTP,看到這行代碼:

fputs($fp, "GET $url HTTP/1.1\r\nHost: {whatismyipaddress.com}\r\nCon ... 
            ^     ^

刪除這些斗拱,HTTP協議中沒有任何這些在那裏,你需要提供一個有效的主機名。解決方案:

fputs($fp, "GET $url HTTP/1.1\r\nHost: whatismyipaddress.com\r\nCon ... 

然後遠程站點會告訴你需要一個用戶代理。添加它作爲一個額外的標頭:

fputs($fp, "GET $url HTTP/1.1\r 
Host: whatismyipaddress.com\r 
Connection: close\r 
User-Agent: Florian der Fensterputzer\r\n\r\n"); 

這將做到這一點。 Demo

+0

非常感謝你非常喜歡 我最好的問候。 – Maroman

+0

夥計們請稍等...不要離開我 – Maroman

+0

「高級代理服務器檢查」的問題whatismyipaddress.com/proxy-check此頁面將檢查訪問者的主機DNS IP不REMOTE_ADRR。除此之外可以這樣做嗎? – Maroman

2

我會嘗試在標頭中使用另一個用戶代理。 我確定他們使用某種基於標題的保護阻止機器人。

使用curl:

$ curl -I 'http://whatismyipaddress.com' 
HTTP/1.1 403 Forbidden 
Date: Tue, 29 Nov 2011 20:48:28 GMT 
Server: Apache/2.2.17 (Unix) DAV/2 
Vary: Accept-Encoding 
Connection: close 
Content-Type: text/html; charset=iso-8859-1 

然而,一旦試圖強制用戶代理它的工作原理:

$ curl -I -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0.1) Gecko/20100101 Firefox/8.0.1' 'http://whatismyipaddress.com' 
HTTP/1.1 200 OK 
Date: Tue, 29 Nov 2011 20:49:24 GMT 
Server: Apache/2.2.17 (Unix) DAV/2 
Set-Cookie: pt=f737a9bb1a119dcec75073f11b05d213; expires=Wed, 30-Nov-2011 20:49:24 GMT 
MS-Author-Via: DAV 
Vary: Accept-Encoding 
Content-Type: text/html 
+0

這是正確的,他們阻止他們認爲是殭屍的客戶,例如捲曲,l,,或沒有用戶代理標題的請求。他需要使用來自Firefox,Chrome,IE等的有效用戶代理來欺騙請求。 – drew010

+0

非常感謝你Uzi&drew010 我最好的問候。 – Maroman

相關問題