PHP cURL HTTP CODE return 0

前端 未结 9 1616
青春惊慌失措
青春惊慌失措 2020-11-29 23:03

I dont understand when I echo $httpCode I always get 0, I was expecting 404 when I change $html_brand into a broken url. Is there anything that I miss or do not know of? Tha

相关标签:
9条回答
  • 2020-11-29 23:09

    Try this after curl_exec to see what's the problem:

    print curl_error($ch);
    

    If it's print something like 'malformed' then check your URL format.

    0 讨论(0)
  • 2020-11-29 23:12

    If you're using selinux it might be because of security restrictions. Try setting this as root:

    # setsebool -P httpd_can_network_connect on
    
    0 讨论(0)
  • 2020-11-29 23:19

    If you connect with the server, then you can get a return code from it, otherwise it will fail and you get a 0. So if you try to connect to "www.google.com/lksdfk" you will get a return code of 400, if you go directly to google.com, you will get 302 (and then 200 if you forward to the next page... well I do because it forwards to google.com.br, so you might not get that), and if you go to "googlecom" you will get a 0 (host no found), so with the last one, there is nobody to send a code back.

    Tested using the code below.

    <?php
    
    $html_brand = "www.google.com";
    $ch = curl_init();
    
    $options = array(
        CURLOPT_URL            => $html_brand,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER         => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING       => "",
        CURLOPT_AUTOREFERER    => true,
        CURLOPT_CONNECTTIMEOUT => 120,
        CURLOPT_TIMEOUT        => 120,
        CURLOPT_MAXREDIRS      => 10,
    );
    curl_setopt_array( $ch, $options );
    $response = curl_exec($ch); 
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    if ( $httpCode != 200 ){
        echo "Return code is {$httpCode} \n"
            .curl_error($ch);
    } else {
        echo "<pre>".htmlspecialchars($response)."</pre>";
    }
    
    curl_close($ch);
    
    0 讨论(0)
  • 2020-11-29 23:22

    Like said here and below, a failed request (i.e. the server is not found) returns false, no HTTP status code, since a reply has never been received.

    Call curl_error().

    0 讨论(0)
  • 2020-11-29 23:23

    check the curl_error after the curl_getinfo to find out the hidden errors.

    if(curl_errno($ch)){   
        echo 'Curl error: ' . curl_error($ch);
    }
    
    0 讨论(0)
  • 2020-11-29 23:25

    Try this:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    
    0 讨论(0)
提交回复
热议问题