Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CURL在不同时间为同一页返回响应代码200和0_Php_Http_Codeigniter_Url_Curl - Fatal编程技术网

Php CURL在不同时间为同一页返回响应代码200和0

Php CURL在不同时间为同一页返回响应代码200和0,php,http,codeigniter,url,curl,Php,Http,Codeigniter,Url,Curl,我面临着一种不寻常的卷曲行为。对于给定的页面,我有时将HTTP响应代码设置为200,有时将0设置为HTTP响应代码。我无法理解这一页是否有效。如果您尝试给定的代码,请至少尝试5-10次,以便您可以看到差异 function print_info() { $url = 'bart.no'; $arr = array( 'bart.no', 'bolandirekt.nu', 'ekompassen.com', 'ekompassen.nu',

我面临着一种不寻常的卷曲行为。对于给定的页面,我有时将HTTP响应代码设置为200,有时将0设置为HTTP响应代码。我无法理解这一页是否有效。如果您尝试给定的代码,请至少尝试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);
        }
    }
}
函数打印信息()
{
$url='bart.no';
$arr=数组(
“巴特,不”,
“bolandirekt.nu”,
“ekompassen.com”,
“ekompassen.nu”,
);
foreach($arr作为$url)
{
echo“
URL:”.$URL; $temp=str_replace(数组(“www.”、“http:/”、“https:/”、“strtolower($url)); //从这个数组中,将决定要前置哪个 $pre_array=array(“,”www.“,”https://“,”http://“,”https://www.", "http://www."); $status_code=array(); //将存储每个值的状态 foreach($pre_数组作为$pre) { $options=array( CURLOPT_RETURNTRANSFER=>TRUE,//返回网页 CURLOPT_HEADER=>TRUE,//不返回头 CURLOPT_FOLLOWLOCATION=>FALSE,//跟随重定向 CURLOPT_ENCODING=>“”,//处理所有编码 CURLOPT_USERAGENT=>“蜘蛛”//我是谁 CURLOPT_AUTOREFERER=>FALSE,//在重定向时设置referer CURLOPT_SSL_VERIFYHOST=>FALSE,//SSL验证主机 CURLOPT_SSL_VERIFYPEER=>FALSE,//SSL验证peer CURLOPT_NOBODY=>FALSE, CURLOPT_CONNECTTIMEOUT=>20,//连接超时 CURLOPT_TIMEOUT=>20,//响应超时 ); //初始化卷曲 $ch=旋度初始值($pre.$temp); //设置卷曲选项 curl_setopt_数组($ch$options); //执行卷曲 $content=curl\u exec($ch); $code=curl\u getinfo($ch,CURLINFO\u HTTP\u code); 回声“; 如果($code==200) { 打印(curl_getinfo($ch)); 打破 } 卷曲关闭($ch); } } }

所以我的最后一个疑问是:为什么我得到的响应代码为200的网页不存在或不打开浏览器?还有,为什么有时即使我保持请求之间的时间间隔,也会在同一页面上得到响应代码0,有时得到响应代码200?

CURL请求没有完成,因此没有响应代码。 原因可能是主机名无效(无法解析)、URL格式错误、超时等

您应该能够获得CodeCaster注释和CURL\u error/CURL\u errno文档中的CURL错误代码


一旦CURL请求正确完成,则(来自服务器的)响应代码应该可用且有意义。

0
不是有效的HTTP状态代码-您很可能得到超时(可能页面加载速度比您的20秒超时慢?)。您也可能因为短时间内的多个请求而被防火墙。在不同的时间获得不同的状态代码是正常的(在我遇到的大多数情况下是由连接问题引起的)。这太模糊了。请说明脚本(提示:
echo$pre.$temp;
)和浏览器中哪个URL失败。请注意,如果
curl\u exec()
返回
false
@codeCaster,则必须调用:对于大多数URL,脚本考虑
http://www
我获得了有效的正文响应,但http代码为0为什么?