php curl se rechaza mientras la versión de línea de comando está funcionando

Soy nuevo aquí para escribir, pero leí muchas respuestas en los últimos años, así que antes que nada: ¡gracias por la gran ayuda que me brindaron hasta ahora! Entonces, esto es lo que me vuelve loco hoy, y no pude encontrar la respuesta en ningún lado:

Tengo un servicio web (un complemento de Openfire) y un backoffice basado en LAMP (en un cuadro separado), que administra el Openfire de forma remota. Después de migrar el Openfire a una nueva (tercera) caja, el código de la oficina administrativa dejó de funcionar. Aquí hay un fragmento:

<?php
    header("Content-Type: text/plain");

    $url = "http://gbbackup.dyndns.org:9090/plugins/goldsteinAdmin/goldsteinadmin"; echo $url."\n";

    $ch = curl_init($url); echo "handle: ".$ch."\n";
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_STDERR, fopen('php://stdout', 'w'));
    $result = curl_exec($ch); echo "Result: ".$result."\n";
    if ($result === false) echo 'cURL error '.curl_errno($ch).': '.curl_error($ch)."\n";
    print_r(curl_getinfo($ch));
    curl_close($ch);
?>

La salida detallada de Curl es:

* About to connect() to gbbackup.dyndns.org port 9090 (#0)
*   Trying 81.183.210.206... * Connection refused
* couldn't connect to host
* Closing connection #0

Ahora lo extraño es que si lo intento a través de la línea de comandos, funciona perfectamente:

user@login01:~/public_html/gb$ curl -v "http://gbbackup.dyndns.org:9090/plugins/goldsteinAdmin/goldsteinadmin"
* About to connect() to gbbackup.dyndns.org port 9090 (#0)
*   Trying 81.183.210.206... connected
* Connected to gbbackup.dyndns.org (81.183.210.206) port 9090 (#0)
> GET /plugins/goldsteinAdmin/goldsteinadmin HTTP/1.1
> User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6
> Host: gbbackup.dyndns.org:9090
> Accept: */*
>
< HTTP/1.1 200 OK
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Set-Cookie: JSESSIONID=12e1urcewodgr;Path=/
< Content-Type: application/json;charset=ISO-8859-1
< Transfer-Encoding: chunked
<
{"type":"error","msg":"RequestNotAuthorised"}
* Connection #0 to host gbbackup.dyndns.org left intact
* Closing connection #0

¿Cuál podría ser la diferencia entre PHP y la línea de comando curl? He eliminado todos los extras sofisticados solo para probar la conexión en sí, pero se debe mantener alguna diferencia.

Hice algunas pruebas más, aquí están los resultados:

  • PHP curl a otros sitios web (por ejemplo, google.com): funciona
  • inserté el enlace en Chrome en mi propia máquina: funciona
  • curl de línea de comando probado a través del sistema php (): no funciona
  • También quería tcpdump las diferencias, pero en el otro cuadro, donde tengo privilegios de root, tanto PHP como la versión de línea de comandos funcionan.

Parece que estas dos cajas no se gustan :-)

¡Gracias de antemano por tu ayuda!

preguntado el 22 de mayo de 12 a las 12:05

1 Respuestas

Con PHP, debe proporcionar el puerto por separado (no en la URL) como:

$url = "http://gbbackup.dyndns.org/plugins/goldsteinAdmin/goldsteinadmin";
...
curl_setopt($ch, CURLOPT_PORT, 9090);
...

Respondido el 26 de junio de 12 a las 15:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.