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.
Может ли кто-нибудь предложить/посоветовать что-то, что может пойти не так?
2 ответов:
проверка и обработка ошибок-это друг программиста. Проверьте возвращаемые значения функций инициализации и выполнения cURL.
curl_error()иcurl_errno()будет содержать дополнительную информацию в случае сбоя: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); }
* The
curl_init()руководство гласит:возвращает ручку завитка на успех,ложные на ошибки.
Я наблюдал функция для возврата
FALSEкогда вы используете его$urlпараметр и домен не могут быть разрешены. Если параметр не используется, то функция может никогда не возвращайтесьFALSE. Всегда проверяйте его в любом случае, так как в руководстве четко не указано, что такое "ошибки" на самом деле.
это случилось со мной вчера, и в моем случае было потому, что я следовал руководству 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- Это символы юникода U + 2010 и U + 002D.надеюсь, это кому-то поможет.
Comments