2012-04-04 14 views
0

Ich möchte etwas wie implementieren curl --digest -u Benutzername: Passwort -d "mydata" http://example.com/push mit Javascript als Chrom-Plugin. Hier ist mein Code.JavaScript für HTTP post XML mit Authentifizierung

<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> 

Dies ist ein domänenübergreifender POST mit HTTP-Basisauthentifizierung. Aufgrund von CORS sendet der Chrome-Browser anstelle von POST eine OPTIONS-Nachrichtenherausforderung für Originate. Wenn ich URL zu derselben Domäne geändert habe, funktioniert es. Wenn ich die Authentifizierung deaktiviert habe, funktioniert es auch. Aber ich muss an die andere Domäne, die nicht unter meiner Kontrolle ist, POST, das bedeutet, dass ich keine Lösungen wie easyXDM verwenden kann. Sie benötigen auch HTTP-Standardauthentifizierung. Ich habe eine Woche lang nach einer Lösung gesucht. Jeder Hinweis wird geschätzt.

+0

Wenn sie CORS nicht unterstützen ('OPTIONS'), gibt es nichts, was man dagegen tun kann. – SLaks

Antwort

0

Haben Sie versucht:

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

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

+0

Ich habe es versucht. Das Gleiche. OPTIONS statt POST sendet. –

Verwandte Themen