php - curl_exec()总是返回false

我写了这段简单的代码:

$ch = curl_init();

//Set options
curl_setopt($ch, CURLOPT_URL, "http://www.php.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$website_content = curl_exec ($ch);

在我的情况下$website_content来自false。任何人都可以建议/建议可能出错的事情吗?

Adithya asked 2019-09-11T10:12:37Z
2个解决方案
201 votes

错误检查和处理是程序员的朋友。 检查初始化和执行cURL函数的返回值。 如果失败,FALSEFALSE将包含更多信息:

try {
    $ch = curl_init();

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

    curl_setopt($ch, CURLOPT_URL, 'http://example.com/');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    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));
    }

    /* Process $content here */

    // Close curl handle
    curl_close($ch);
} catch(Exception $e) {

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

}

* FALSE手册说明:

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

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

Linus Kleen answered 2019-09-11T10:13:13Z
2 votes

这发生在我昨天,在我的情况下是因为我正在按照PDF手册开发一些模块与API通信,而直接从手册复制链接,由于一些奇怪的原因,复制链接中的hyphens在 不同的编码,因此hyphen始终返回false,因为它无法与服务器通信。

我花了几个小时才终于明白了下面这些字符的区别:

https://www.e‐example.com/api
https://www.e-example.com/api

每当我尝试直接从浏览器访问链接时,它转换为类似于hyphens的内容。

在你看来它们是相同的,但如果你在这里检查hyphens的编码,你会看到第一个hyphen是unicode字符U + 2010而另一个是U + 002D。

希望这有助于某人。

CIRCLE answered 2019-09-11T10:14:00Z
translate from https://stackoverflow.com:/questions/8227909/curl-exec-always-returns-false