2012-05-29 32 views
5

Tengo un problema con la autenticación HTTP. No pude obtener el contenido de esta url porque necesita http auth.php curl - accediendo a url con autenticación http (necesita ayuda)

Código:

<?php 

$url = "http://www.abcdefg.com/12345/"; 

$username = 'username'; 
$password = 'password'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 

$out = curl_exec($ch); 

print "error:" . curl_error($ch) . "<br />"; 
print "output:" . $out . "<br /><br />"; 

curl_close($ch); 

?> 

El problema es: En lugar de mostrar el contenido real, se muestra "302 Found, el documento ha movido aquí".

Lo he intentado con "http: // username: [email protected]/12345/", no funciona.

Al acceder a esta url (1), una ventana emergente solicita el nombre de usuario y la contraseña. pero la ventana emergente es de otra url (2) (un servidor de autenticación sso). si pasa la autenticación luego vuelve a url (1) nuevamente. en este momento, puedo acceder al contenido de esta url (1).

utilizo firebug el siguiente mensaje accediendo a la URL directamente desde el navegador:

Paso 1

URL: GET http://www.abcdefg.com/12345/ 
Status: 302 Found 
Protocol: http 

Paso 2

URL: GET https://www.ssoauth.com/obrareq.cgi?wh=xxx wu=xxx wo=xxx rh=http://www.abcdefg.com ru=/12345/ 
Status: 302 Redirect 
Protocol: https 

Paso 3

URL: GET http://www.abcdefg.com/obrar.cgi?cookie=xxxxxxxxxxxxxxx 
Status: 302 Found 
Protocol: http 

Paso 4

URL: GET http://www.abcdefg.com/12345/ 
Status: 200 OK 
Protocol: http 

a continuación, mostrar el contenido ...

¿Es esto algo que ver con la cookie? ¿Cómo puedo usar php curl para leer el contenido?

Respuesta

5

usted tiene que establecer:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

Esto hará que el enrollamiento obedecen al 302 y generar una solicitud adicional.

+0

acabo añade curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, true) pero muestra "Error de análisis en línea de 32" línea 32 es: curl_setopt ($ ch, opción CURLOPT_HTTPAUTH, CURLAUTH_ANY); ¿Debo agregar algo relacionado con https? porque ** en el Paso 2 **, usa https con el puerto 443. – Strong

+0

¡Olvidé el ';' al final de la línea! –

+0

opps, se perdió el ";" ... – Strong