`curl`이 작동하지 않고 메시지도 표시되지 않습니다.

`curl`이 작동하지 않고 메시지도 표시되지 않습니다.

주소를 확인하기 위해 컬을 사용하는 스크립트가 있는데 왜 아래와 같은 일부 주소에서 멈추나요? 그것을 방지하려면 어떻게 해야 합니까? 자세한 내용은 이 주소를 확인하세요

curl https://10.10.34.36/test

내 스크립트:

$sites = file_get_contents('./sites.json');
$sites = json_decode($sites);
function get_html_title($html){
    preg_match("/\<title.*\>(.*)\<\/title\>/isU", $html, $matches);
    return $matches[1];
}
function get_redirect_target($url)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); 
    
// The maximum number of seconds to allow cURL functions to execute.
    curl_setopt($ch, CURLOPT_TIMEOUT, 8); //timeout in seconds
    $headers = curl_exec($ch);
    curl_close($ch);

    $result = array("old"=>$url);
    // Check if there's a Location: header (redirect)
    if (preg_match('/^Location: (.+)$/im', $headers, $matches)){
        $result["new"] = trim($matches[1]); 
        $html = file_get_contents($result["new"]);
        $title = get_html_title($html);
        $result["title"] = trim($title); 
        return $result;
    }
       

    // If not, there was no redirect so return the original URL
    return "";
}
function get_redirect_final_target($url)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // follow redirects
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // set referer on redirect
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.105 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)");
    curl_exec($ch);
    $target = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    curl_close($ch);

    if ($target)
        return $target;

    return false;
}
$redirectsList = array();
foreach($sites as $key=>$site){
    $res=get_redirect_final_target($site->url);
    if($res!=$site->url){
    $html = file_get_contents($res);
    $title = get_html_title($html);
    $result["title"] = trim($title);     
    $newurl = ["old"=>$site->url,"new"=>$res,"title"=>$title];
        array_push($redirectsList,$newurl);
        $sites[$key]->url = $newurl['new'];
    }
}
file_put_contents('./sites5.json', json_encode($sites, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT));
echo '<table border="1">';
    echo '<tr>';
       echo '<td>Old url</td>';
       echo '<td>New url</td>';
       echo '<td>Title</td>';
    echo '</tr>';
foreach($redirectsList  as $record){
    echo '<tr>';
       echo '<td>'.$record['old'].'</td>';
       echo '<td>'.$record['new'].'</td>';
       echo '<td>'.$record['title'].'</td>';
    echo '</tr>';
}
echo '</table>';

내 JSON 파일:

[
    {
        "url": "https://10.10.34.36/test"
    },
    {
        "url": "https://google.com/"
    }
]

답변1

그것은 개인 IP 주소입니다. 당신이 가지고 있는 서버의 종류를 아는 것은 불가능합니다. 그러나 curl그것이 얼마나 널리 퍼져 있는지, 얼마나 잘 테스트되었는지, 얼마나 강력한지를 아는 것은 감히 다음과 같이 진단하고 싶습니다.

10.10.34.36에 있는 서버가 전혀 존재하지 않을 수도 있고, 정지되거나 오작동할 수도 있고, 네트워크 설정이 어떤 방식으로든 손상되었을 수도 있습니다(프록시가 잘못 구성되었거나 호스트에 대한 경로가 없음...). 이 모든 것이 curlnbot보다 제대로 작동할 가능성이 훨씬 높습니다.

답변2

"매달려" 있을 가능성은 거의 없습니다. 아마도 상대방의 응답을 기다리고 있을 것입니다. 내 결과는 귀하의 결과와 다르며 대부분의 경우 10.0.0.0/8은 비공개 범위이므로 테스트 사례를 시도하지 않겠습니다.

당신은 할 수컬 라이브러리가 요청을 완료하는 데 소요되는 시간을 제한합니다.CURLOPT_TIMEOUT[_MS] 사용

관련 정보