1

カールの異常な動作に直面しています。特定のページで、HTTP 応答コードが 200 になることもあれば、HTTP 応答コードが 0 になることもあります。このページが有効かどうかわかりません。与えられたコードを試す場合は、少なくとも 5 ~ 10 回は試してみて、違いを確認してください。

function print_info()
{
    $url = 'bart.no';
    $arr = array(
    'bart.no',
    'bolandirekt.nu',
    'ekompassen.com',
    'ekompassen.nu',
    );

    foreach ($arr as $url)
    {
        echo "<br/>URL: " . $url;
        $temp = str_replace(array("www.", "http://", "https://"), "", strtolower($url));

        // From this array it will be decided which is to prepend
        $pre_array = array("", "www.", "https://", "http://", "https://www.", "http://www.");
        $status_code = array();

        // For each Value Status will be stored
        foreach ($pre_array as $pre)
        {

            $options = array(
                CURLOPT_RETURNTRANSFER => TRUE, // return web page
                CURLOPT_HEADER => TRUE, // don't return headers
                CURLOPT_FOLLOWLOCATION => FALSE, // follow redirects
                CURLOPT_ENCODING => "", // handle all encodings
                CURLOPT_USERAGENT => "spider", // who am i
                CURLOPT_AUTOREFERER => FALSE, // set referer on redirect
                CURLOPT_SSL_VERIFYHOST => FALSE, //ssl verify host
                CURLOPT_SSL_VERIFYPEER => FALSE, //ssl verify peer
                CURLOPT_NOBODY => FALSE,
                CURLOPT_CONNECTTIMEOUT => 20, // timeout on connect
                CURLOPT_TIMEOUT => 20, // timeout on response
            );

            // Initializing Curl
            $ch = curl_init($pre . $temp);
            // Set Curl Options
            curl_setopt_array($ch, $options);
            // Execute Curl
            $content = curl_exec($ch);

            $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            echo "<pre/>";
            if ($code == 200)
            {
                print_r(curl_getinfo($ch));
                break;
            }           
                            curl_close($ch);
        }
    }
}

したがって、私の最後の疑問は次のとおりです。存在しない、またはブラウザで開いていないページに対して、応答コード 200 が返されるのはなぜですか? また、リクエスト間の時間間隔を保っていても、同じページに対してレスポンス コード 0 とレスポンス コード 200 を取得することがあるのはなぜですか?

4

1 に答える 1

2

CURL 要求が完了しなかったため、応答コードはありません。この理由は、無効なホスト名 (解決できない)、不正な URL、タイムアウトなどである可能性があります。

CodeCaster のコメントと curl_error / curl_errno ドキュメントのように、CURL エラー コードを取得できるはずです。

CURL 要求が正常に完了すると、(サーバーからの) 応答コードが利用可能になり、意味を持つようになります。

于 2012-11-27T19:31:13.140 に答える