curl_exec () her zaman yanlış döndürür


114

Bu basit kod parçasını yazdım:

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

Benim durumumda $website_contentgeliyor false. Herhangi biri yanlış gidebilecek bir şey önerebilir / tavsiye edebilir mi?


8
curl_error()Hata ayrıntıları için danışın ve bunları buraya gönderin lütfen.
Linus Kleen

@LinusKleen curl_error () 'u bir cevap olarak gönderirseniz, sorunumun ne olduğunu görmeme izin verdiği için ona oy vereceğim.
Giles Roberts

Sorun tam olarak neydi? Hangi hata curl_error()ortaya çıktı?
showdev

Yanıtlar:


242

Hata kontrolü ve yönetimi programcının dostudur. Başlatma ve çalıştırma cURL işlevlerinin dönüş değerlerini kontrol edin. curl_error()ve curl_errno()arıza durumunda daha fazla bilgi içerecektir:

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

}

* curl_init() Manuel devletler:

Başarı durumunda cURL handleyi , hatalarda FALSE döndürür .

Fonksiyonun parametresini FALSEkullandığınızda döneceğini gözlemledim $urlve etki alanı çözülemedi. Parametre kullanılmamış ise, fonksiyon olabilir dönmeyeceklerini FALSE. Her zaman yine de kontrol edin, çünkü kılavuzda "hataların" gerçekte ne olduğunu açıkça belirtmiyor.


9
+1: PHP'de curl_execFALSE dönüşte curl için basit ve doğrudan sorun giderme . - PHP örneğinde Curl Ayrıntılı Modu
hakre

Evet. Aslında bunu uzun zaman önce anlamıştım. Cevabınız için teşekkürler :)
Adithya

7
Sorun değil. Bunun için bir Canlanma rozeti aldım :-) Kabul ettiğiniz için teşekkürler.
Linus Kleen

@marverix pekala, adı Linus: P
Nino Škopac

ve curl_close ($ ch);
Rafik Bari

10

Benim durumumda ben sette gerek VERIFYHOSTve VERIFYPEERiçin falsebu gibi:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

aramadan önce curl_exec($ch).

Çünkü kendi kendine atanan sertifikalara sahip iki geliştirme ortamı arasında çalışıyorum. Geçerli sertifikalarla setine gerek yoktur VERIFYHOSTve VERIFYPEERhiç falseçünkü curl_exec($ch)yöntem işe ve beklediğiniz etkiyi dönecektir.


Bu aslında benim için faydalı oldu. Bahşiş için teşekkürler!
n8jadams

3

Bu dün başıma geldi ve benim durumumda, bir API ile iletişim kurmak için bir modül geliştirmek için bir PDF kılavuzunu takip ediyor olmam ve bağlantıyı doğrudan kılavuzdan kopyalarken, bazı garip nedenlerden dolayı, hyphenkopyalanan bağlantıdan farklı bir kodlama ve dolayısıyla curl_exec()her zaman geri dönüyordu falseçünkü sunucuyla iletişim kuramıyordu.

Sonunda aşağıdaki karakterlerdeki farkı anlamam birkaç saatimi aldı:

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

Bağlantıya doğrudan bir tarayıcıdan erişmeye çalıştığımda, benzer bir şeye dönüştürüldü https://www.xn--eexample-0m3d.com/api.

Onlar eşit ama kodlamasını kontrol eğer size görünebilir hyphens burada ilk olduğunu göreceksiniz hyphenunicode karakter U 2010 ve diğer bir olduğunu U + 002D .

Umarım bu birine yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.