Php CURL在不同时间为同一页返回响应代码200和0
我面临着一种不寻常的卷曲行为。对于给定的页面,我有时将HTTP响应代码设置为200,有时将0设置为HTTP响应代码。我无法理解这一页是否有效。如果您尝试给定的代码,请至少尝试5-10次,以便您可以看到差异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',
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为什么?