2012-04-04 128 views
0

我想實現類似 curl --digest -u用戶名:密碼-d「mydata」http://example.com/push 用Javascript作爲Chrome插件。 這是我的代碼。JavaScript for HTTP post with authentication

<html> 
<head> 
</head> 
<body> 
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script type='text/javascript' src="jquery.base64.js"></script> 
<script language="javascript"> 

     function setHeader(xhr) { 
      xhr.setRequestHeader('Authorization', $.base64Encode('username:password')); 
     } 

     $.ajax({ 
     type: "POST", 
     url: "http://example.com/push", 
     data: "<Phone><Data>mydata</Data></Phone>", 
     xhrFields: { 
      withCredentials: true 
     }, 
     crossDomain: true, 
     beforeSend: setHeader, 
     success: function (data,status,xhr){ 
      //do something 
     } 
     }); 
</script> 
</body> 
</html> 

這是一個使用HTTP基本認證的跨域POST。 由於CORS,Chrome瀏覽器而不是POST發送OPTIONS消息質詢來源。 如果我將網址更改爲相同的域,它的工作原理。 如果我禁用身份驗證,它也可以。 但是我必須POST到其他域,這不在我的控制之下,這意味着我不能使用像easyXDM這樣的解決方案。他們還需要HTTP基本認證。我一直在尋找解決方案一週。任何暗示是讚賞。

+0

如果他們不支持CORS('OPTIONS'),有什麼可以做的。 – SLaks 2012-04-04 19:46:55

回答

0

你嘗試:

xhr.setRequestHeader("Authorization", "Basic " + encodeBase64(username + ":" + password) //usage: Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

參考:http://www.w3.org/Protocols/HTTP/1.0/spec.html#BasicAA

+0

我試過了。一樣。 OPTIONS而不是POST正在發送。 – 2012-04-04 21:54:32