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
。 任何人都可以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 。
希望这有助于某人。