[英]Problems with username or pass with colon when setting CURLOPT_USERPWD
我們正在嘗試使用PHP5中的curl使用基本身份驗證登錄網站。
部分代碼是這樣的:
<?
...
$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);
解決了這個問題。
我們對另一台服務器的測試有它的缺點 - 工作的服務器在Windows上運行IIS,我們遇到問題的生產服務器在linux上運行apache。
所以我再說一遍:使用包含冒號的冒號的用戶名或密碼顯然沒有問題。 這解釋了為什么沒有這個問題的文檔。
抱歉得出結論,謝謝你的幫助。
我在curl代碼中查找了CURLOPT_USERPWD的提取實現,這就是它的完成方式在username-passwd字符串上有一個正向搜索,尋找“:”字符。 然后提取用戶名和密碼(之前的字符串:是用戶名和后面的字符串:是passwd)
因此,正如您所猜測的那樣,如果用戶名字符串包含:字符,則所有這些都將失敗。 但是,由於:字符作為用戶名的一部分的可能性要小得多,因此不會將其報告為錯誤。
謝謝
看起來沒有文檔解決方案,但您可以嘗試這種解決方法:
curl_setopt($ch, CURLOPT_URL, "http://{$uname}:{$pass}@www.test.com/login.php");
但我沒有測試過..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.