0

さまざまな URL で xml サイト マップの存在を確認しています。URL example.com/sitemap.xml を提供し、www.example.com/sitemap.xml への 301 がある場合、明らかに 301 が返されます。www.example.com/sitemap.xml が存在しない場合、404 は表示されません。したがって、301 を取得した場合は、別の cURL を実行して、www.example.com/sitemap.xml に対して 404 が返されるかどうかを確認します。しかし、理由により、ランダムな 404 および 303 ステータス コードが表示されます。

private function check_http_status($domain,$file){

        $url = $domain . "/" . $file;

        $curl = new Curl();

        $curl->url = $url;
        $curl->nobody = true;
        $curl->userAgent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) Gecko/20060601 Firefox/2.0.0.1 (Ubuntu-edgy)';
        $curl->execute();
        $retcode = $curl->httpCode();

        if ($retcode == 301 || $retcode == 302){

            $url = "www." . $domain . "/" . $file;

            $curl = new Curl();
            $curl->url = $url;
            $curl->nobody = true;
            $curl->userAgent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) Gecko/20060601 Firefox/2.0.0.1 (Ubuntu-edgy)';
            $curl->execute();
            $retcode = $curl->httpCode();

        }

        return $retcode;

    }
4

3 に答える 3

2

返された応答コードのリストを見てください - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

通常、これらは Web ブラウザによって自動的に処理されますが、curl を使用して手動で処理を行うため、各応答の意味を理解する必要があります。301orは、302提供された代替 URL を使用してリソースにアクセスする必要があることを意味します。これは、リクエストへのアドインのように単純なwww場合もありますが、別のドメイン全体へのリダイレクトのように複雑になる場合もあります。

は、リソースへのアクセス試行を303使用しており、使用する必要があることを意味します。POSTGET

于 2012-11-29T15:45:26.147 に答える
0

301 または 302 を受信した場合は、別の場所を想定して試すのではなく、応答で見つかった場所を使用する必要があります。

この例でわかるように、サーバーからの応答には、ファイルの新しい場所が含まれています。それを次のリクエストに使用します: http://en.wikipedia.org/wiki/HTTP_301#Example

于 2012-11-29T15:42:34.963 に答える
0

「followLocation」は非常にうまく機能します。これが私がそれを実装した方法です:

$url = "http://www.YOURSITE.com//"; // Assign you url here.

$ch = curl_init(); // initialize curl.
curl_setopt($ch, CURLOPT_URL, $url); // Pass the URL as the option/target.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 0 will print html. 1 does not.
curl_setopt($ch, CURLOPT_HEADER, 0); // Please curl, inlude the header in the output.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // ..and yes, follow what the server sends as part of the HTTP header.

$response_data = curl_exec($ch); // execute curl with the target URL.
$http_header = curl_getinfo($ch); // Gets information about the last transfer i.e. our URL
// Print the URLs that are not returning 200 Found.
if($http_header['http_code'] != "200") {
    echo " <b> PAGE NOT FOUND => </b>"; print $http_header['http_code'];
}
// print $http_header['url']; // Print the URL sent back in the header. This will print the page to wich you were redirected.
print $url; // this will print the original URLs that you are trying to access

curl_close($ch); // we are done with curl; so let's close it.
于 2013-12-11T16:39:41.653 に答える