1

我有一个简单的 cURL 脚本,它工作得很好。但我很好奇如何检测坏网址。“坏”是指不存在的 URL,或者如果我调用的服务器关闭了一段时间,或者我犯了错误并输入了错误的 URL。(只是例子)

这是我到目前为止所拥有的:

<?php

$url = 'http://someurl_or_ip.com/some_file.php';
$post_fields = "type=whatever";
$post_fields .= "&first=".$first;
$post_fields .= "&last=".$last;


$ch = curl_init($url); // create a new cURL resource 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);   
curl_setopt($ch, CURLOPT_TIMEOUT, 1800);  

// Execute the request. 
$raw_response = curl_exec($ch); 
$succeeded  = curl_errno($ch) == 0 ? true : false; 

echo $raw_response;

?>

通常 $raw_response 是我可以解析并用于其他事情的东西,比如我想如何向用户显示数据。

我只是用一个不存在的文件(但到一个有效的域)替换了 $url,然后我得到“未找到......请求的 URL......在此服务器上找不到......”

这是否意味着我需要解析这个 apache 服务器消息才能知道它不是一个好的 URL?或者 cURL 是否有办法通过标头信息来检测它?

4

1 回答 1

2

您可以查看标头中的 HTTP 响应代码,对于未找到的文件,它将是 404:

$http = curl_init($url);
$result = curl_exec($http);
$http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
curl_close($http);
echo $http_status;

如果服务器不可用,您显然根本不会得到服务器的响应,因此没有 HTTP 响应代码。在这种情况下curl_exec()会返回 false,在这种情况下您可以处理错误:

if(curl_exec($ch) !== false) {
    // Success
} else {
    // Error
    $error_str = curl_error($ch);
    $error_num = curl_errno($ch);
}
于 2012-10-20T23:07:18.217 回答