2011-01-20 10 views
7

Staramy się używać curl w PHP5, aby zalogować się do witryny przy użyciu podstawowego uwierzytelniania.Problemy z nazwą użytkownika lub z dwukropkiem podczas ustawiania CURLOPT_USERPWD

Częściowa kod jest tak:

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

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

ale wydaje się, że dwukropek w naszym hasłem jest przyczyną kłopotów.

Nie możemy zmienić hasła do naszej witryny produkcyjnej, ale potwierdziliśmy, że kod działa poprawnie w innej witrynie, w której używana jest alfanumeryczna nazwa użytkownika i hasło.

Czy istnieje sposób na uniknięcie dwukropka w haśle, aby curl nadal działał? Próbowaliśmy "p \: assword" bez powodzenia.

Dzięki.

+0

Czy możesz uciec z tego przy pomocy \:? Wydaje się, że w ogóle nie ma na ten temat dokumentacji. – Merijn

Odpowiedz

6

więc okazuje się, że to nie był problem z dwukropkiem .... to był problem ze schematem uwierzytelniania.

początkowo używaliśmy:

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 

i zmieniających się:

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

rozwiązaniu problemu.

Nasz test na innym serwerze miał swoje wady - serwer, na którym działały, uruchomił IIS w oknach, serwer produkcyjny, z którym mieliśmy problemy, uruchamiał Apache na Linuksie.

Powtarzam: najwyraźniej nie ma problemów z używaniem nazw użytkownika lub haseł zawierających dwukropki z lokami. to wyjaśnia, dlaczego nie byłoby dokumentacji tego problemu.

Przepraszam za wyciąganie wniosków i dziękuję za pomoc.

+0

Myślę, że przekonasz się, że 'CURLAUTH_DIGEST' będzie wybraną metodą wewnętrznie, ponieważ zwykle porównuje hash' user: noonce: pass', tworząc dodatkowe dwukropki bez konsekwencji. – calcinai

0

Wygląda na to, nie ma udokumentowane rozwiązanie, ale można spróbować tego rozwiązania:

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

ale nie mam go przetestowany ..

1

Spojrzałam realizację ekstrakcji CURLOPT_USERPWD w kodzie Curl, ten sposób jej zrobić Jest naprzód searh na ciąg nazwy użytkownika passwd, szukając „:” charakteru. A następnie nazwa użytkownika i passwd są wyodrębniane (ciąg przed: to nazwa użytkownika i ciąg po: jest passwd)

Tak więc, jak można się domyślić, jeśli ciąg nazwy użytkownika zawiera znak:, wszystko to zawiedzie. Ponieważ szanse na to, że postać jest częścią nazwy użytkownika są znacznie mniejsze, nie jest to zgłaszane jako błąd.

dziękuję

Powiązane problemy