Проблемы с именем пользователя или передачей с двоеточием при установке CURLOPT_USERPWD - PullRequest
7 голосов
/ 21 января 2011

Мы пытаемся использовать curl в PHP5 для входа на сайт с использованием обычной аутентификации.

Частичный код выглядит следующим образом:

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

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

, но кажется, что двоеточие в нашем паролевызывает проблемы.

Мы не можем изменить пароль для нашего производственного сайта, но мы подтвердили, что код отлично работает на другом сайте, где используются буквенно-цифровые имя пользователя и пароль.

Есть ли способэкранировать двоеточие в пароле, так что curl все еще работает?Мы попробовали "p \: assword" без удачи.

Спасибо.

Ответы [ 3 ]

6 голосов
/ 03 февраля 2011

получается, что это не было проблемой с двоеточием .... это была проблема со схемой аутентификации.

Сначала мы использовали:

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 

и изменение на:

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY);

исправило проблему.

У нашего теста на другом сервере были свои недостатки - сервер, который работал, работал с IIS на Windows, на производственном сервере у нас были проблемыwith запускал apache на linux.

Итак, повторюсь: нет проблем с использованием имен пользователей или паролей, которые содержат двоеточия с curl.это объясняет, почему не было документации по этой проблеме.

извините за поспешные выводы и спасибо за помощь.

1 голос
/ 01 февраля 2013

Я посмотрел реализацию извлечения CURLOPT_USERPWD в коде curl, вот как это делается. В строке username-passwd ищется прямой поиск символа «:».А затем извлекаются имя пользователя и пароль (строка до: это имя пользователя, а строка после: это пароль)

Итак, как вы уже догадались, если строка имени пользователя содержит символ:, все это не удастся.Однако, поскольку шансы символа: быть частью имени пользователя значительно меньше, это не считается ошибкой.

спасибо

0 голосов
/ 21 января 2011

Похоже, что нет документированного решения, но вы можете попробовать этот обходной путь:

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

Но я не проверял его ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...