Pytanie curl_exec () zawsze zwraca false


Napisałem ten prosty fragment kodu:

$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);

W moim przypadku $website_content przychodzi jako false. Czy ktoś może zasugerować / doradzić coś, co może pójść nie tak?


76
2017-11-22 13:51


pochodzenie


Konsultować curl_error() po szczegóły błędów i opublikuj je tutaj, proszę. - Linus Kleen
@LinusKleen Jeśli opublikujesz curl_error () jako odpowiedź, zrobię to, ponieważ pozwoliło mi zobaczyć, jaki jest mój problem. - Giles Roberts
Jaki dokładnie był problem? Jaki błąd wystąpił curl_error() odsłonić? - showdev


Odpowiedzi:


Sprawdzanie i obsługa błędów jest przyjacielem programisty. Sprawdź zwracane wartości inicjowania i wykonywania funkcji cURL. curl_error() i curl_errno() będzie zawierał dalsze informacje w przypadku awarii:

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()  podręcznik stwierdza:

Zwraca uchwyt cURL na sukces, FAŁSZYWY na błędy.

Obserwowałem funkcję do zwrotu FALSE kiedy go używasz $url Parametr i domena nie mogła zostać rozstrzygnięta. Jeśli parametr nie jest używany, funkcja moc Nigdy nie wracaj FALSE. Zawsze jednak należy to sprawdzić, ponieważ instrukcja nie określa wyraźnie, czym są "błędy".


177
2017-11-09 15:44



+1: Proste i proste rozwiązywanie problemów z lokowaniem w PHP curl_exec FALSE return. - Curl Verbose Mode w przykładzie PHP - hakre
Tak. Wcześniej to wymyśliłem. Dzięki za odpowiedź :) - Adithya
Nie ma problemu. Otrzymałem odznakę odrodzenia :-) Dziękuję za przyjęcie. - Linus Kleen
@marverix cóż, nazywa się Linus: P - Nino Škopac
i nie zapomnij curl_close ($ ch); - Rafik Bari


Zdarzyło mi się to wczoraj i w moim przypadku było to, że śledziłem instrukcję w formacie PDF, aby opracować moduł do komunikacji z API i podczas kopiowania linku bezpośrednio z podręcznika, z jakiegoś dziwnego powodu, hyphen z skopiowanego linku znajdowało się w innym kodowaniu, a tym samym curl_exec() zawsze wracał false ponieważ nie mógł się komunikować z serwerem.

Zajęło mi kilka godzin, aby w końcu zrozumieć różnicę w postaciach poniżej:

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

Za każdym razem, gdy próbowałem uzyskać dostęp do linku bezpośrednio z przeglądarki, konwertowałem go na coś podobnegohttps://www.xn--eexample-0m3d.com/api.

Może ci się wydawać, że są równi, ale jeśli sprawdzasz kodowanie hyphens  tutaj zobaczysz, że pierwszy hyphen to znaki Unicode U + 2010 a drugim jest U + 002D.

Mam nadzieję, że to pomaga komuś.


1
2017-11-12 00:29