Câu hỏi curl_exec () luôn trả về false


Tôi đã viết đoạn mã đơn giản này:

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

Trong trường hợp của tôi $website_content đến như false. Bất cứ ai có thể đề nghị / tư vấn cho một điều gì đó có thể xảy ra không?


76
2017-11-22 13:51


gốc


Tư vấn curl_error() để biết chi tiết lỗi và đăng các thông tin này tại đây, vui lòng. - Linus Kleen
@LinusKleen Nếu bạn đăng các curl_error () như một câu trả lời tôi sẽ upvote nó vì nó cho phép tôi để xem vấn đề của tôi là gì. - Giles Roberts
Chính xác thì vấn đề là gì? Lỗi gì curl_error() tiết lộ? - showdev


Các câu trả lời:


Lỗi kiểm tra và xử lý là người bạn của người lập trình. Kiểm tra giá trị trả về của các hàm cURL khởi tạo và thực hiện. curl_error() và curl_errno() sẽ chứa thêm thông tin trong trường hợp thất bại:

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

}

* Các curl_init()  thủ công tiểu bang:

Trả về một xử lý cURL khi thành công, SAI về lỗi.

Tôi đã quan sát hàm trả về FALSE khi bạn đang sử dụng $url tham số và tên miền không thể được giải quyết. Nếu tham số không được sử dụng, hàm có thể không bao giờ trở lại FALSE. Luôn luôn kiểm tra nó dù sao, vì hướng dẫn không nêu rõ "lỗi" thực sự là gì.


177
2017-11-09 15:44



+1: Chụp ảnh đơn giản và thẳng cho curl trong PHP trên curl_exec FALSE trở lại. - - Curl Verbose Mode trong ví dụ PHP - hakre
vâng. Đã thực sự tìm ra điều này trong thời gian dài trở lại. Cảm ơn vì câu trả lời :) - Adithya
Không vấn đề gì. Có một huy hiệu Revival cho nó :-) Cảm ơn bạn đã chấp nhận. - Linus Kleen
@marverix tốt, tên của anh ấy là Linus: P - Nino Škopac
và đừng quên curl_close ($ ch); - Rafik Bari


Điều này đã xảy ra với tôi hôm qua và trong trường hợp của tôi là vì tôi đã theo một hướng dẫn sử dụng PDF để phát triển một số mô-đun để giao tiếp với một API và trong khi sao chép liên kết trực tiếp từ hướng dẫn sử dụng, vì một số lý do kỳ lạ, hyphen từ liên kết được sao chép ở dạng mã hóa khác và do đó curl_exec() luôn trở về false bởi vì nó không thể giao tiếp với máy chủ.

Nó đã cho tôi một vài giờ để cuối cùng hiểu được sự khác biệt trong các nhân vật dưới đây:

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

Mỗi khi tôi cố gắng truy cập liên kết trực tiếp từ trình duyệt, nó chuyển đổi thành một thứ nhưhttps://www.xn--eexample-0m3d.com/api.

Nó có vẻ như bạn rằng họ bằng nhau nhưng nếu bạn kiểm tra mã hóa của hyphens  đây bạn sẽ thấy rằng hyphen là một ký tự unicode U + 2010 và cái còn lại là U + 002D.

Hy vọng điều này sẽ giúp một ai đó.


1
2017-11-12 00:29