2013-05-03 35 views
1

我有一個工作的JavaScript/jQuery REST應用程序,帶有webtrends的exctraction API,IE除外。帶有域用戶名的REST的Internet Explorer身份驗證

我通過SSL發送驗證 - https:// [domainname] \ [username]:[password] @ ws.webtrends.com/v3/Reporting/profiles/10609/Keymetrics /?start_period = current_day-1 & end_period = CURRENT_DAY & period_type = AGG &格式= JSON

當我看到網絡選項卡下的開發工具(F12)>的內部時,Internet Explorer改變反斜槓( '\'),以正斜槓( '/') ,這會導致瀏覽器尋找具有域名值的網站。

所有其他瀏覽器不會更改反斜槓。

$.ajaxSetup({ 
     crossDomain: true, 
     async: false, 
     contentType: "application/jsonp", 
     dataType: "jsonp", 
     type: "POST", 
     cache: false, 
     beforeSend: function(xhr) { 
      xhr.overrideMimeType("application/jsonp; charset=UTF-8"); 
     }, 
     headers: { 
      "Authorization": mBaseSixtyFourVar 
     }, 
     url: mXferObj.mUrl 
    }); 

    $.ajax({ 
     success: function(mInfo){   
      mRecvObj = mInfo; 
      alert(mRecvObj.data[0].measures.NewVisitors+""); 
     }, 
     error: function (xmlHttpRequest, textStatus, errorThrown) { 
      alert("xmlHttpRequest.readyState: "+xmlHttpRequest.readyState+", textStatus: "+textStatus+", errorThrown: "+errorThrown+", mXferObj.mUrl: "+mXferObj.mUrl); 
     } 
    }); 

我曾嘗試以下:

插入該到ajaxsetup

data: "{'domain':'domainname','username':'blabla','password':'blabla'}", 

使用PHP,我已經使用curl嘗試,但除了布爾沒有返回(假):

我試過file_get_contents()但我收到了開放流錯誤。

我在FireFox,Opera,Safari,Chrome中工作 - 爲什麼IE始終保持完美?

任何幫助,將不勝感激,並在此先感謝

按照要求,這裏是我試過的捲曲代碼之一:

if (!function_exists('curl_init')){ 
    die('CURL is not installed!'); 
} 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $Url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch); 
var_dump $output; 

我已經試過選項:

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt(CURLOPT_USERPWD, '[username]:[password]') 

我已經嘗試了很多不同的東西,那是最後的

+0

你可以顯示你使用PHP和curl進行嘗試的代碼嗎? – 2013-05-03 21:49:59

+0

更新後的代碼,以反映所需的curL代碼 – kronus 2013-05-03 22:11:50

回答

0

UPDATE

鑑於你有關在XMLHTTPRequest提供的用戶名和密碼的評論,我做了一些研究,發現jQuery的確實支持此功能。所有你應該做的是usernamepassword參數添加到您的要求:

$.ajaxSetup({ 
    crossDomain: true, 
    async: false, 
    contentType: "application/jsonp", 
    dataType: "jsonp", 
    type: "POST", 
    cache: false, 
    beforeSend: function(xhr) { 
     xhr.overrideMimeType("application/jsonp; charset=UTF-8"); 
    }, 
    headers: { 
     "Authorization": mBaseSixtyFourVar 
    }, 
    url: mXferObj.mUrl, 
    username: "yourUsername", 
    password: "yourPassword" 
}); 

原來的答案

簡單地說,IE瀏覽器不支持此功能。它在2004年發佈了以前的安全更新中移除:

http://support.microsoft.com/kb/834489

默認情況下,發佈的Windows Internet Explorer的版本開始,安全更新的版本832894不支持處理用戶名和密碼在HTTP和HTTP中使用安全套接字層(SSL)或HTTPS URL。以下URL語法不支持在Internet Explorer或Windows資源管理器: HTTP(S)://用戶名:[email protected]/resource.ext

替代可包括使一個AJAX請求到自己的服務器,然後一次在服務器端,在託管代碼中執行請求。例如,如果您選擇的語言是C#,則可以使用HttpWebRequest並提供正確的NetworkCredentials信息來完成請求。

+0

感謝您的輸入Cory和我會給你的答案功勞,但我發現這在相同的kb - http://support.microsoft.com/kb/832414 - 這是他們的答案作爲工作 – kronus 2013-05-07 17:58:12

+0

@ user881083:謝謝你的跟進。我做了一些更多的研究,並根據您的反饋提供了最新的答案。 – 2013-05-07 18:25:09

+0

是的,如果我不必爲用戶名輸入我的域名\用戶名,這將工作,因爲IE正在將反斜槓更改爲正斜槓。我嘗試了%5C並轉義了反斜槓,但似乎沒有任何效果。我再次感謝您的反饋 – kronus 2013-05-21 21:07:20