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_contentfalse 。 任何人都可以build议/build议有什么可能会出错?

错误检查和处理是程序员的朋友。 检查初始化和执行cURL函数的返回值。 curl_error()curl_errno()将在失败的情况下包含进一步的信息:

 try { $ch = curl_init(); if (FALSE === $ch) 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); if (FALSE === $content) throw new Exception(curl_error($ch), curl_errno($ch)); // ...process $content now } catch(Exception $e) { trigger_error(sprintf( 'Curl failed with error #%d: %s', $e->getCode(), $e->getMessage()), E_USER_ERROR); } 

这发生在我昨天,在我的情况是因为我遵循PDF手册开发一些模块与API通信,并直接从手册复制链接,由于某种奇怪的原因,复制链接的hyphen在不同的编码,因此curl_exec()总是返回false因为它无法与服务器通信。

花了我几个小时才终于明白了下面这些人物的不同:

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

每次我试图直接从浏览器访问链接,它转换为类似https://www.xn--eexample-0m3d.com/api

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

希望这有助于某人。