Je suis en train de demander une ressource HTTP qui nécessite une autorisation de base les en-têtes de dans une application Adobe AIR. J'ai essayé d'ajouter manuellement les en-têtes de la requête, ainsi que l'utilisation de la setRemoteCredentials() la méthode à définir, en vain.
Voici le code:
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private function authAndSend(service:HTTPService):void
{
service.setRemoteCredentials('someusername', 'somepassword');
service.send();
}
private function resultHandler(event:ResultEvent):void
{
apiResult.text = event.result.toString();
}
private function resultFailed(event:FaultEvent):void
{
apiResult.text = event.fault.toString();
}
]]>
</mx:Script>
<mx:HTTPService id="apiService"
url="https://mywebservice.com/someFileThatRequiresBasicAuth.xml"
resultFormat="text"
result="resultHandler(event)"
fault="resultFailed(event)" />
<mx:Button id="apiButton"
label="Test API Command"
click="authAndSend(apiService)" />
<mx:TextArea id="apiResult" />
Toutefois, une norme de base auth boîte de dialogue encore apparaît demandant à l'utilisateur de leur nom d'utilisateur et mot de passe. J'ai un sentiment que je ne fais pas ça de la bonne façon, mais toutes les infos que j'ai pu trouver (Flex docs, les blogs, Google, etc.) n'a pas travaillé ou a été trop vague pour vous aider.
Toute la magie noire, oh Flex gourous? Merci.
EDIT: Changement de setRemoteCredentials() pour setCredentials() retourne le code ActionScript suivant d'erreur:
[MessagingError message='Authentication not supported on DirectHTTPChannel (no proxy).']
EDIT: Problème résolu, après une certaine attention de la part d'Adobe. Voir les messages ci-dessous pour une explication complète. Ce code fonctionne pour l'Authentification HTTP-têtes de longueur arbitraire.
import mx.utils.Base64Encoder;
private function authAndSend(service:HTTPService):void
{
var encoder:Base64Encoder = new Base64Encoder();
encoder.insertNewLines = false; // see below for why you need to do this
encoder.encode("someusername:somepassword");
service.headers = {Authorization:"Basic " + encoder.toString()};
service.send();
}