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.
Может ли кто-нибудь предложить/посоветовать что-то, что может пойти не так?

583   2  

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

    Ничего не найдено.