2011-11-29 2 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 영구적으로 날짜 이전이 오류를 볼 수 있습니다 : Tue, 29 Nov 2011 20:19:36 GMT 서버 : Apache/2.2.17 (Unix) DAV/2 위치 : http://whatismyipaddress.com/ MS 제작자 비아 : DAV 콘텐츠 길이 : 0 연결 : 닫기 콘텐츠 유형 : 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분 7초 서버 : 아파치/2.2.17 (Unix) DAV/2 Content-Length : 421 연결 : 닫기 Content-Type : text/html; charset = iso-8859-1 찾을 수 없음

요청한 URL/proxy-check를이 서버에서 찾을 수 없습니다.

또한 요청을 처리하기 위해 ErrorDocument를 사용하려고 시도하는 동안 404 찾을 수 없음 오류가 발생했습니다. {whatismyipaddress.com} 포트에서 아파치/2.2.17 (유닉스) DAV/2 서버 확실 해요 80

는, 더는 코드에 문제가 없다. 많은 사이트에서 테스트 해본 결과 아무런 문제가 없었습니다

누구든지이 문제를 설명 할 수 있습니까?

감사합니다.

+0

http : // whatismyipaddress.com' (http : //와 함께) –

+1

요청의 'Host :'헤더에서 도메인 이름을 둘러싼'{}'을 제거하십시오. – DaveRandom

+0

http://whatismyipaddress.com/terms-of-use에서주의하십시오. "사전 서면 허가 없이는 스크립트, 에이전트, 응용 프로그램을 사용하거나이 웹 사이트를 자동으로 쿼리 할 수 ​​없습니다." –

답변

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 문제로이 페이지는 방문객을 위해 REMOTE_ADRR이 아닌 호스팅 DNS IP를 호스팅하는지 확인합니다. 가능합니까? – Maroman

2

헤더에 다른 사용자 에이전트를 사용하려고합니다. 그들은 일종의 헤더 기반 보호를 사용하여 로봇을 차단하고있을 것이라고 확신합니다.

사용하여 컬 :

$ 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

이것은 정확합니다. 그들은 curl, lynx 또는 사용자 에이전트 헤더가없는 요청과 같은 봇이라고 생각하는 클라이언트를 차단합니다. 그는 Firefox, Chrome, IE 등에서 유효한 사용자 에이전트를 사용하여 요청을 스푸핑해야합니다. – drew010

+0

대단히 감사합니다. Uzi & drew010 최고 감사합니다. – Maroman

관련 문제