Мы пытаемся использовать curl в PHP5 для входа на сайт с использованием базовой аутентификации.
Частичный код выглядит так:
<? ... $uname = "username"; $pass = "p:assword"; curl_setopt($ch,CURLOPT_USERPWD,"$uname:$pass"); ... ?>
но кажется, что двоеточие в нашем пароле вызывает проблемы.
Мы не можем изменить пароль для нашего производственного сайта, но мы подтвердили, что код отлично работает на другом сайте, где используется буквенно-цифровое имя пользователя и пароль.
Есть ли способ избежать двоеточия в пароле, поэтому скручивание все еще работает? Мы попробовали «p \: assword» без везения.
Благодарю.
поэтому выясняется, что это не проблема с двоеточием …. это была проблема с схемой аутентификации.
сначала мы использовали:
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
и переход на:
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
исправлена проблема.
У нашего теста на другом сервере были свои недостатки – на сервере, который работал, работало на IIS на окнах, на производственном сервере, с которым у нас были проблемы, был запущен apache на linux.
Поэтому я повторяю: по-видимому, нет проблем с использованием имен пользователей или паролей, содержащих двоеточия с завитом. это объясняет, почему не было документации по этой проблеме.
извините за прыжки к выводам и спасибо за помощь.
Я искал реализацию извлечения CURLOPT_USERPWD в curl-коде, вот как это делается. В строке username-passwd есть поиск вперед, ища символ «:». И затем извлекаются имя пользователя и passwd (строка before: is username и строка после: passwd)
Итак, как вы уже догадались, если строка username содержит символ:, все это закончится неудачей. Однако, поскольку шансы: character, являющегося частью имени пользователя, значительно меньше, это не сообщается как ошибка.
благодаря
Похоже, что документального решения нет, но вы можете попробовать это обходное решение:
curl_setopt($ch, CURLOPT_URL, "http://{$uname}:{$pass}@www.test.com/login.php");
Но я его не тестировал.