2011-01-20 8 views
7

PHP5でcurlを使用して基本認証を使用してWebサイトにログインしようとしています。CURLOPT_USERPWDを設定したときのユーザー名またはコロンでの問題

部分的なコードは次のようである:

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

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

が、私たちのパスワードにコロンがトラブルを引き起こしているようです。

プロダクションサイトのパスワードを変更することはできませんが、英数字のユーザー名とパスワードを使用する別のサイトでコードが正常に動作することが確認されました。

カールがまだ機能するようにパスワードにコロンをエスケープする方法はありますか?我々は運がない "p \:assword"を試しました。

ありがとうございました。

+0

恐らく\:でエスケープすることはできますか?これに関するすべてのドキュメントはまったくないようです。 – Merijn

答えて

6

コロンで... 認証スキームに問題がありました。

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 

とに変更を:私たちが使用していた最初の

curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

は、問題を修正しました。

他のサーバーに対するテストでは、Windows上でIISを実行していたサーバーが問題を抱えていたため、linuxでApacheを実行していました。

だから私は繰り返します:カールのコロンを含むユーザー名やパスワードの使用には明らかに問題はありません。これはなぜこの問題の文書化がないのかを説明します。

申し訳ありませんが、結論に飛び乗って、助けてくれてありがとうございます。

+0

私は、 'CURLAUTH_DIGEST'が内部的に選択されたメソッドであることに気付くでしょう。これは、一般的には、' user:noonce:pass'のハッシュを比較して結果のないコロンを追加するためです。 – calcinai

0

何の文書化ソリューションがないように見えますが、あなたは、この回避策を試みることができる:そう、それは問題ではなかったことが判明

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

しかし、私はそれをテストしていません。..

1

私は、これは、そのユーザー名、passwdの文字列の前方searhが探して、あり 行わ方法です 、カールコードでCURLOPT_USERPWDの抽出の実施を見上げ、「:」の文字が。 そして、usernameとpasswdが抽出されます(前の文字列:usernameとそれ以降の文字列はpasswdです)。

したがって、ユーザー名文字列に:文字が含まれていると、これはすべて失敗します。 しかし、:の文字がユーザー名の一部である可能性はかなり低いので、これはバグとして報告されていません。

ありがとうございました

関連する問題