2012-03-29 44 views
47

Envío un código de artículo a un servicio web en formato xml usando cUrl (php). Me da la respuesta correcta en localhost, pero cuando lo haga el servidor se notaCómo resolver el error cURL (7): no se pudo conectar al host?

cURL error (7): no se pudo conectar al servidor

Y aquí está mi código:

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

Envío el código del artículo al recuento y obtengo los detalles del mismo. Intenté usar las versiones php 4+ y php5 +, nada funciona Cualquier solución.

+0

elegir un proxy que utiliza un puerto 80 –

+0

uso rizo opción de detalle para obtener más información – Preexo

+0

Voy a añadir dos cosas aquí que con el tiempo ya que mi problema resuelto: 1. Papel curvado ejecuta desde la línea de comandos con '--verbose ' 2. Si estás en OSX con Little Snitch (o similar), mira eso. –

Respuesta

2

¿Puede acceder a esa URL por navegador o por script PHP? El error que se muestra es que no se pudo conectar. Entonces, primero confirme que la URL es accesible.

+3

Sí. Desde localhost, puedo acceder a él. Lo busqué en el navegador, suena. – Raj

41

código de error CURL 7 (CURLE_COULDNT_CONNECT)

es muy explícita ... que significa Failed to connect() to host or proxy.

El siguiente código podría funcionar en cualquier sistema:

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

Si no puede ver la página de google, entonces .. your URL is wrong o tiene algún problema firewall o restriction.

+0

Puedo ver la página de google. Pero luego la misma url lo uso en localhost y allí funciona bien. – Raj

+0

Es su URL ... ¿puede dar una URL de muestra? Permítame probar para usted – Baba

+0

No entiendo lo que está pidiendo ... – Raj

1

Compruebe si los puertos 80 y 443 están bloqueados. o ingrese - IP graph.facebook.com e ingréselo en el archivo etc/hosts

14

Error de "ERROR DE CURL 7 Error al conectarse al permiso denegado" cuando, por alguna razón, la solicitud de curl es bloqueada por algún cortafuegos o cosa similar .

se enfrentará a este problema cuando la solicitud de ondulación no sea con puertos estándar.

por ejemplo, si hace un curl a alguna URL que está en el puerto 1234, se encontrará con este problema donde la URL con el puerto 80 le dará resultados fácilmente.

Lo más común es que este error se haya visto en CentOS y en cualquier otro sistema operativo con 'SElinux'.

que necesitan ya sea desactivar o cambiar 'SElinux' a permisivas

echar un vistazo en este caso

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

espero que esto ayude

+0

Pero, ¿qué tal el sistema Mac – MeganZhou

+3

? Deshabilitar SELinux es excesivo y afectará negativamente la seguridad en otras áreas. Puede permitir explícitamente puertos distintos a los conocidos al cambiar esa opción específica del terminal: setsebool -P httpd_can_network_connect en –

+0

¿Hay una lista de puertos estándar, para los cuales curl no arroja este error? –

-1

también se puede obtener esto si estás tratando de golpear la misma URL con múltiples solicitudes HTTP al mismo tiempo. Muchas solicitudes curl no podrán conectarse y así regresar con el error

1

Este problema también puede deberse a la realización de llamadas curl a https cuando no está configurado en el dispositivo remoto. Llamar a través de http puede resolver este problema en estas situaciones, al menos hasta que configure ssl en el control remoto.

1

En mi caso tuve algo así como cURL Error (7): ... Operation Timed Out. Estoy usando la conexión de red de la compañía para la que estoy trabajando.Necesitaba crear algunas variables de entorno. El siguiente trabajó para mí:

En terminal de Linux:

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

En las ventanas que ha creado (las mismas) las variables de entorno en el camino ventanas.

Espero que ayude!

¡Recuerdos!

+0

Es yourproxy - 127.0.0.1 –

2

En PHP, si su red está bajo proxy. Debe establecer la URL proxy y el puerto

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

Ésta es soluciona mi problema

1

En mi caso, el problema fue causado por el proveedor de alojamiento que estaba usando el bloqueo de paquetes HTTP se dirigió a su bloque de IP que se originó a partir dentro de su bloque de IP. Un-frickin-creíble !!!

Cuestiones relacionadas