我需要從sitemap.xml文件獲取頁面URL的http響應代碼。當我通過cron進程獲取響應代碼時,它返回403(稱爲訪問被禁止:雖然我可以從瀏覽器訪問傳遞的URL)。curl請求返回錯誤的響應代碼
但是,如果我從本地主機運行相同的代碼,它將返回正確的http響應代碼(即200)。
爲什麼從本地主機和服務器返回不同的http響應代碼的區別?如何解決問題?
提取http響應碼的代碼如下。
function check_response_code() {
$pageurl='http://www.certona.com/online-merchandising/';
$trimurl = '';
$start = '';
$end = '';
$total = '';
$start = microtime(true);
$response_code = '';
if (!stristr($pageurl, "http://"))
{
if (!stristr($pageurl, "https://"))
{
$trimurl = "http://" . $pageurl;
} else
{
$trimurl = $pageurl;
}
} else
{
$trimurl = $pageurl;
}
$curl = curl_init();
//don't fetch the actual page, you only want headers
curl_setopt($curl, CURLOPT_URL, $trimurl);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FILETIME, true);
$result = curl_exec($curl);
$timestamp = curl_getinfo($curl, CURLINFO_FILETIME);
$response_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$mime_type = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
$end = microtime(true);
$total = round($end - $start, 5);
if ($timestamp != -1)
{ //otherwise unknown
$arr=array(date("Y-m-d H:i:s", $timestamp), $response_code, $total, $mime_type); //etc
} else
{
$arr=array("", $response_code, $total, $mime_type);
}
echo "<pre>";
print_r($arr);
echo "</pre>";
}
謝謝。
hello ...這是本地主機的輸出。但是當我從服務器上的cron進程嘗試相同的代碼時,它會返回不同的http響應代碼(即403而不是200)! – nir 2012-04-25 07:03:24