2011-01-20 23 views
7

Estamos tratando de usar curl en PHP5 para iniciar sesión en un sitio web utilizando autenticación básica.Problemas con el nombre de usuario o pase con dos puntos al configurar CURLOPT_USERPWD

código parcial es la siguiente:

<? 
... 
$uname = "username"; 
$pass = "p:assword"; 

curl_setopt($ch,CURLOPT_USERPWD,"$uname:$pass"); 
... 
?> 

pero parece que los dos puntos en nuestra contraseña está causando problemas.

No podemos cambiar la contraseña de nuestro sitio de producción, pero confirmamos que el código funciona bien en otro sitio donde se utiliza un nombre de usuario alfanumérico y una contraseña.

¿Hay alguna manera de escapar de los dos puntos en la contraseña para que curl aún funcione? Probamos "p \: assword" sin suerte.

Gracias.

+0

¿Se puede escapar con \:? No parece haber ninguna documentación sobre esto en absoluto. – Merijn

Respuesta

6

Así que resulta que no era un problema con los dos puntos .... era un problema con el esquema de autenticación.

en un primer momento que estábamos usando:

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 

y cambiando a:

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

solucionado el problema.

Nuestra prueba contra otro servidor tenía sus defectos: el servidor que funcionaba ejecutaba IIS en Windows, el servidor de producción con el que teníamos problemas ejecutaba apache en Linux.

Así que repito: aparentemente no hay problemas con el uso de nombres de usuario o contraseñas que contienen dos puntos con curl. esto explica por qué no habría documentación de este problema.

lo siento por sacar conclusiones, y gracias por la ayuda.

+0

Creo que encontraría que 'CURLAUTH_DIGEST' sería el método seleccionado internamente, ya que esto comúnmente compara un hash del' user: noonce: pass', lo que da lugar a dos puntos adicionales sin consecuencias. – calcinai

0

Parece que no hay una solución documentada, pero se podría intentar esta solución:

curl_setopt($ch, CURLOPT_URL, "http://{$uname}:{$pass}@www.test.com/login.php"); 

pero no he probado ..

1

busqué la puesta en práctica de extracción de CURLOPT_USERPWD en el código de rizo, Esto es como se hace Hay una searh hacia adelante en la cadena usuario-passwd, buscando el carácter ":". Y luego se extraen el nombre de usuario y contraseña (la cadena anterior: es nombre de usuario y la cadena después: es passwd)

Así que, como habrás adivinado, si la cadena de nombre de usuario contiene un carácter: todo esto fallará. Sin embargo, como las posibilidades de que: el carácter sea parte del nombre de usuario son considerablemente menores, esto no se informa como un error.

gracias

Cuestiones relacionadas