2011-01-20 8 views
7

Stiamo tentando di utilizzare curl in PHP5 per accedere a un sito Web utilizzando l'autenticazione di base.Problemi con nome utente o passaggio con due punti durante l'impostazione di CURLOPT_USERPWD

codice parziale è simile a questo:

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

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

ma sembra che il colon nella nostra password sta causando problemi.

Non siamo in grado di modificare la password per il nostro sito di produzione, ma abbiamo confermato che il codice funziona correttamente su un altro sito in cui viene utilizzato un nome utente e una password alfanumerici.

C'è un modo per sfuggire i due punti nella password così arricciata funziona ancora? Abbiamo provato "p \: assword" senza fortuna.

Grazie.

+0

Riuscirai a scappare con \:? Non sembra esserci alcuna documentazione a riguardo. – Merijn

risposta

6

Così si scopre che non era un problema con i due punti ... era un problema con lo schema di autenticazione.

in un primo momento che stavamo usando:

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 

e cambiando a:

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

risolto il problema.

Il nostro test contro un altro server ha avuto i suoi difetti: il server che funzionava stava eseguendo IIS su Windows, il server di produzione con cui stavamo avendo problemi stava eseguendo apache su linux.

Quindi ripeto: non ci sono apparentemente problemi con l'utilizzo di nomi utente o password che contengono due punti con arricciatura. questo spiega perché non ci sarebbe documentazione di questo problema.

scusa per aver saltato alle conclusioni, e grazie per l'aiuto.

+0

Penso che troveremmo che 'CURLAUTH_DIGEST' sarebbe il metodo selezionato internamente, in quanto questo compara comunemente un hash di' user: noonce: pass', rendendo eventuali coloni aggiuntivi senza conseguenze. – calcinai

0

Sembra che non esiste una soluzione documentata, ma si potrebbe provare questa soluzione:

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

Ma non ho ancora provato ..

1

ho guardato l'attuazione di estrazione di CURLOPT_USERPWD nel codice ricciolo, Questo è come il suo fare C'è un searh avanti sulla stringa di nome utente-passwd, alla ricerca del carattere ":". E poi vengono estratti nome utente e passwd (la stringa prima: è username e la stringa dopo: is passwd)

Quindi, come avrete indovinato, se la stringa del nome utente contiene un carattere: tutto questo avrà esito negativo. Tuttavia, poiché le probabilità che il carattere sia come parte del nome utente sia notevolmente inferiore, questo non viene segnalato come un bug.

grazie

Problemi correlati