2012-05-04 3 views
1
$fileSource = "http://google.com"; 
    $ch = curl_init($fileSource); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_exec($ch); 
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    if ($retcode != 200) { 
     $error .= "The source specified is not a valid URL."; 
    } 
    curl_close($ch); 

여기에 문제가 있습니다. 위의 설정을 사용하면 $fileSource = "http://google.com";이 작동하지 않습니다. 반대로 $fileSource = "http://www.google.com/";으로 설정하면 작동합니다.PHP : Curl로 URL 유효성 확인

무엇이 문제입니까? 즉 당신이 어떤 사이트에 사용자 에이전트를 스푸핑해야 할 수도 있습니다 작동하지 않는 경우

답변

0

하나는 영구 (301) 리디렉션의 기본 차이를 보여 구글의 응답의 나머지 부분을 절단 한 확인 (200)을 클릭합니다.

200 개의 상태 코드 만 유효하다고 생각하는 이유는 무엇입니까? CURL이 당신을 위해 처리하자 :

curl_setopt($ch, CURLOPT_FAILONERROR, true); 

manual에서 : 반환 된 HTTP 코드는 디폴트의 동작은, 페이지를 반환하는 것입니다 (400)보다 크거나 같은 경우

TRUE가 자동으로 실패 일반적으로 코드를 무시합니다.

0

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 

리디렉션 따를 컬 이야기를 명시 적으로 봅니다.

또한 JS를 사용하는 경우 행운을 빕니다.

+0

따라 가지 않을 것이지만 괜찮습니다 ... –

0

실제로보고있는 것은 301 리디렉션의 결과입니다. 여기에 내가 다시 당신이 301 리디렉션에서 제안 실제 www.google.com에 컬을 할 경우, 당신은 다음을 얻을 것이다, 그러나 명령 줄

curl -vvvvvv http://google.com 
* About to connect() to google.com port 80 (#0) 
* Trying 173.194.43.34... 
* connected 
* Connected to google.com (173.194.43.34) port 80 (#0) 
> GET/HTTP/1.1 
> User-Agent: curl/7.25.0 (x86_64-apple-darwin11.3.0) libcurl/7.25.0 OpenSSL/1.0.1b zlib/1.2.6 libidn/1.22 
> Host: google.com 
> Accept: */* 
> 
< HTTP/1.1 301 Moved Permanently 
< Location: http://www.google.com/ 
< Content-Type: text/html; charset=UTF-8 
< Date: Fri, 04 May 2012 04:03:59 GMT 
< Expires: Sun, 03 Jun 2012 04:03:59 GMT 
< Cache-Control: public, max-age=2592000 
< Server: gws 
< Content-Length: 219 
< X-XSS-Protection: 1; mode=block 
< X-Frame-Options: SAMEORIGIN 
< 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<TITLE>301 Moved</TITLE></HEAD><BODY> 
<H1>301 Moved</H1> 
The document has moved 
<A HREF="http://www.google.com/">here</A>. 
</BODY></HTML> 
* Connection #0 to host google.com left intact 
* Closing connection #0 

에서 자세한 컬을 사용하여있어거야. 다른 하나는 바로 대답하면서

curl -vvvvvv http://www.google.com 
* About to connect() to www.google.com port 80 (#0) 
* Trying 74.125.228.19... 
* connected 
* Connected to www.google.com (74.125.228.19) port 80 (#0) 
> GET/HTTP/1.1 
> User-Agent: curl/7.25.0 (x86_64-apple-darwin11.3.0) libcurl/7.25.0 OpenSSL/1.0.1b zlib/1.2.6 libidn/1.22 
> Host: www.google.com 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Date: Fri, 04 May 2012 04:05:25 GMT 
< Expires: -1 
< Cache-Control: private, max-age=0 
< Content-Type: text/html; charset=ISO-8859-1 

나는 단지 www. 도메인에 200 OK 301 대 REDIRECT