1

問題なく動作する単純な cURL スクリプトがあります。しかし、悪い URL を検出する方法に興味があります。また、「悪い」とは、存在しない 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 に答える