且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

curl_exec() 总是返回 false

更新时间:2021-07-18 22:51:54

错误检查和处理是程序员的朋友.检查初始化和执行 cURL 函数的返回值.curl_error()curl_errno() 将包含更多信息,以防万一失败:

Error checking and handling is the programmer's friend. Check the return values of the initializing and executing cURL functions. curl_error() and curl_errno() will contain further information in case of failure:

try {
    $ch = curl_init();

    // Check if initialization had gone wrong*    
    if ($ch === false) {
        throw new Exception('failed to initialize');
    }

    // Better to explicitly set URL
    curl_setopt($ch, CURLOPT_URL, 'http://example.com/');
    // That needs to be set; content will spill to STDOUT otherwise
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // Set more options
    curl_setopt(/* ... */);
    
    $content = curl_exec($ch);

    // Check the return value of curl_exec(), too
    if ($content === false) {
        throw new Exception(curl_error($ch), curl_errno($ch));
    }

    // Check HTTP return code, too; might be something else than 200
    $httpReturnCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    /* Process $content here */

} catch(Exception $e) {

    trigger_error(sprintf(
        'Curl failed with error #%d: %s',
        $e->getCode(), $e->getMessage()),
        E_USER_ERROR);

} finally {
    // Close curl handle unless it failed to initialize
    if (is_resource($ch)) {
        curl_close($ch);
    }
}


*curl_init() 手册 状态:

成功时返回 cURL 句柄,错误时FALSE.

Returns a cURL handle on success, FALSE on errors.

我观察到当您使用其 $url 参数并且无法解析域时,该函数返回 FALSE.如果参数未使用,函数可能永远不会返回FALSE.但是,无论如何都要检查它,因为手册没有明确说明什么错误"实际上是.

I've observed the function to return FALSE when you're using its $url parameter and the domain could not be resolved. If the parameter is unused, the function might never return FALSE. Always check it anyways, though, since the manual doesn't clearly state what "errors" actually are.