2012-03-29 44 views
47

Tôi gửi mã mặt hàng tới dịch vụ web ở định dạng xml bằng cUrl (php). Tôi nhận được câu trả lời đúng trong localhost, nhưng khi làm điều đó máy chủ nó cho thấyCách giải quyết Lỗi cURL (7): không thể kết nối với máy chủ?

cURL Lỗi (7): không thể kết nối để lưu trữ

Và đây là mã của tôi:

function xml_post($post_xml, $url) 
    { 
     $user_agent = $_SERVER['HTTP_USER_AGENT']; 

     $ch = curl_init(); // initialize curl handle 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_FAILONERROR, 1);   
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 50); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_xml); 
     curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
    // curl_setopt($ch, CURLOPT_PORT, $port);   

     $data = curl_exec($ch); 
     $curl_errno = curl_errno($ch); 
     $curl_error = curl_error($ch); 
     if ($curl_errno > 0) { 
       echo "cURL Error ($curl_errno): $curl_error\n"; 
     } else { 
       echo "Data received\n"; 
     } 
     curl_close($ch); 

    echo $data; 
} 

Tôi gửi mã mục đến kiểm đếm và tìm chi tiết từ nó. Tôi đã thử sử dụng cả hai phiên bản php 4+ và php5 +, không có giải pháp nào hoạt động.

+0

chọn một proxy có sử dụng một cổng 80 –

+0

sử dụng cuộn tròn tùy chọn tiết để có thêm thông tin – Preexo

+0

Tôi sẽ thêm hai điều ở đây mà cuối cùng có vấn đề của tôi được giải quyết: 1. chạy cURL từ dòng lệnh với '--verbose ' 2. Nếu bạn đang sử dụng OSX với Little Snitch (hoặc tương tự), hãy nhìn vào đó. –

Trả lời

2

Bạn có thể truy cập URL đó bằng trình duyệt hoặc bằng tập lệnh PHP không? Lỗi được hiển thị là bạn không thể kết nối. Trước tiên, hãy xác nhận rằng URL có thể truy cập được.

+3

Vâng. Từ localhost tôi có thể truy cập nó. Tôi ping nó trong trình duyệt, nó ping. – Raj

41

mã lỗi CURL 7 (CURLE_COULDNT_CONNECT)

là rất rõ ràng ... nó có nghĩa Failed to connect() to host or proxy.

Đoạn mã dưới đây sẽ làm việc trên hệ thống bất kỳ:

$ch = curl_init("http://google.com"); // initialize curl handle 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    $data = curl_exec($ch); 
    print($data); 

Nếu bạn không thể xem trang google sau đó .. your URL is wrong hoặc bạn có một số vấn đề firewall hoặc restriction.

+0

Tôi có thể xem trang google. Nhưng sau đó cùng một url tôi sử dụng nó trong localhost và có nó hoạt động tốt. – Raj

+0

URL của nó ... bạn có thể cung cấp URL mẫu cho phép tôi kiểm tra cho bạn – Baba

+0

Tôi không hiểu bạn đang hỏi gì không. – Raj

1

Kiểm tra xem cổng 80 và 443 có bị chặn không. hoặc nhập - IP graph.facebook.com và nhập nó vào tập tin etc/hosts

14

Lỗi "CURL ERROR 7 Không kết nối với Quyền bị từ chối" gây ra, khi vì bất kỳ lý do yêu cầu curl nào bị chặn bởi một số tường lửa hoặc điều tương tự .

bạn sẽ gặp sự cố này khi yêu cầu curl không có cổng chuẩn.

ví dụ: nếu bạn cuộn tròn đến một số URL nằm trên cổng 1234, bạn sẽ gặp phải sự cố này khi URL có cổng 80 sẽ cho bạn kết quả dễ dàng.

Lỗi phổ biến nhất này đã được nhìn thấy trên CentOS và bất kỳ hệ điều hành nào khác có ‘SElinux’.

bạn cần phải hoặc vô hiệu hóa hoặc thay đổi 'SELinux' để dễ dãi

có một cái nhìn vào một

http://www.akashif.co.uk/php/curl-error-7-failed-to-connect-to-permission-denied

Hy vọng điều này này giúp

+0

Nhưng làm thế nào về hệ thống mac – MeganZhou

+3

Vô hiệu hóa SELinux là quá mức cần thiết và sẽ ảnh hưởng tiêu cực đến bảo mật ở các khu vực khác. Bạn có thể cho phép rõ ràng các cổng khác với các cổng đã biết bằng cách thay đổi tùy chọn cụ thể đó từ thiết bị đầu cuối: setsebool -P httpd_can_network_connect trên –

+0

Có danh sách các cổng tiêu chuẩn, mà curl không ném lỗi này? –

-1

bạn cũng có thể có được điều này nếu bạn là cố gắng truy cập cùng một URL với nhiều yêu cầu HTTP cùng một lúc. Nhiều yêu cầu curl sẽ không thể kết nối và do đó trở lại với lỗi

1

Sự cố này cũng có thể gây ra bằng cách thực hiện cuộc gọi curl đến https khi nó không được định cấu hình trên thiết bị từ xa. Gọi qua http có thể giải quyết vấn đề này trong những tình huống này, ít nhất là cho đến khi bạn cấu hình ssl trên điều khiển từ xa.

1

Trong trường hợp của tôi, tôi có một cái gì đó như cURL Error (7): ... Operation Timed Out. Tôi đang sử dụng kết nối mạng của công ty mà tôi đang làm việc.Tôi cần tạo một số biến môi trường. Tiếp theo làm việc cho tôi:

Trong Linux Terminal:

$ export https_proxy=yourProxy:80 
$ export http_proxy=yourProxy:80 

Trong cửa sổ Tôi tạo ra (giống nhau) biến môi trường trong các cửa sổ cách.

Tôi hy vọng điều đó sẽ hữu ích!

Trân trọng!

+0

Yourproxy - 127.0.0.1 –

2

Trong PHP, Nếu mạng của bạn được ủy quyền. Bạn nên thiết lập URL proxy và cổng

curl_setopt($ch, CURLOPT_PROXY, "http://url.com"); //your proxy url 
curl_setopt($ch, CURLOPT_PROXYPORT, "80"); // your proxy port number 

Đây là giải quyết vấn đề của tôi

1

Trong trường hợp của tôi, vấn đề là do nhà cung cấp hosting Tôi đã sử dụng chặn các gói tin http gửi đến khối IP của họ có nguồn gốc từ trong khối IP của họ. Un-frickin-believable !!!

Các vấn đề liên quan