Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flex
Flex Forum d'entraide sur la programmation Adobe Flex : applications Internet riches (RIA)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/11/2007, 15h07   #1
Membre régulier
 
Inscription : novembre 2003
Messages : 245
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 245
Points : 72
Points : 72
Par défaut Envoi de XML par HTTPService

Bonjour,

Je travaille sur un projet d'applications Web. Actuellement le client est en HTML + Javascript, et communique de façon asynchrone en AJAX avec le serveur

Je dois développer un client Flex communiquant de la même façon :
- envoi d'une requête HTTP au format XML
- réception de la réponse au format XML

Quelle est la façon la plus simple de faire ceci ? J'ai essayé d'utiliser le composant HTTPService, sans parvenir à formuler ma requête XML.

D'autre part, peut-on débugger de façon à analyser les requêtes HTTP entrantes et sortantes ?

Merci.
84mickael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 17h26   #2
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
exemple pour le chargement :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
 
var externalXML:XML;
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("xmlFile.xml");
loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete);
 
function onComplete(event:Event):void
{
    var loader:URLLoader = event.target as URLLoader;
    if (loader != null)
    {
        externalXML = new XML(loader.data);
        trace(externalXML.toXMLString());
    }
    else
    {
        trace("loader is not a URLLoader!");
    }
}
-HTTPAnalyzer
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 19h15   #3
Membre régulier
 
Inscription : novembre 2003
Messages : 245
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 245
Points : 72
Points : 72
Merci. Même si je pense ne pas pouvoir utiliser URLLoader dans le cas précis, ça m'a aidé à pondre ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import mx.rpc.events.ResultEvent; 
import mx.rpc.http.HTTPService; 
 
public var actionOpen : HTTPService; 
 
public function init() : void { 
   initActionOpen(); 
} 
 
private function initActionOpen() : void { 
 
   var request : XML = 
      <request screen-name="EMPLOYEE" screen-id="0" action="open"> 
      </request> 
 
   actionOpen = new HTTPService(); 
   actionOpen.contentType = HTTPService.CONTENT_TYPE_XML; 
   actionOpen.method = "POST"; 
   actionOpen.request = request; 
   actionOpen.resultFormat = HTTPService.RESULT_FORMAT_E4X; 
   actionOpen.url = "http://.../TelosysBookStore/action"; 
   actionOpen.addEventListener(ResultEvent.RESULT, responseActionOpen); 
} 
 
public function responseActionOpen(evt : ResultEvent) : void { 
   mx.controls.Alert.show(evt.result.toString()); 
}
Réponse du serveur :

Code :
1
2
3
<response screen-name="" screen-id="" action=""> 
   <return code="-1" message="HTTP GET method is not supported ! "/> 
</response>
84mickael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2007, 00h59   #4
Membre régulier
 
Inscription : novembre 2003
Messages : 245
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 245
Points : 72
Points : 72
A force de me battre, sans succès, avec l'objet HTTPService, j'ai décidé de simplifier au maximum mon script, et de placer un écouteur sur une page PHP :

Code :
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
 
	<mx:HTTPService id="action" url="http://localhost/request.php" method="POST"> 
	</mx:HTTPService>
 
	<mx:Button id="bouton" label="Bouton" click="action.send(bouton.label);"/>
 
</mx:Application>
Résultat : la page PHP est bien accédée, mais aucune information n'est envoyée dans le POST ! Curieux, non ?
84mickael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 13h24   #5
Membre actif
 
Homme Mouloud OULD FELLA
Développeur Web
Inscription : mai 2002
Messages : 423
Détails du profil
Informations personnelles :
Nom : Homme Mouloud OULD FELLA
Localisation : Algérie

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2002
Messages : 423
Points : 199
Points : 199
si ça peut vous aider !

http://www.adobe.com/devnet/flex/art...flex2_php.html
ouldfella est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 14h00   #6
Membre régulier
 
Inscription : novembre 2003
Messages : 245
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 245
Points : 72
Points : 72
Merci pour les suggestions. Finalement j'ai remplacé mon écouteur PHP par un petit programme Java plus adapté.

Le problème vient donc de la requête HTTP. J'ai testé pas mal de combinaisons (content type + request), sans jamais parvenir à envoyer du XML brut (en l'occurence <request />) :

Code :
1
2
3
4
5
6
7
8
9
10
11
import mx.rpc.http.HTTPService;
 
public function request(): void {
 
	var action: HTTPService = new HTTPService();
	action.url = "http://localhost:8081/";
	action.method = "POST";
	action.contentType = HTTPService.CONTENT_TYPE_XML;
	action.request = new XML(<request/>);
	action.send();
}


Pourtant la documentation est très claire au sujet de la propriété HTTPService.request :
Citation:
Object of name-value pairs used as parameters to the URL. If the contentType property is set to application/xml, it should be an XML document.
Curieux !
84mickael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 17h24   #7
Membre régulier
 
Inscription : novembre 2003
Messages : 245
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 245
Points : 72
Points : 72
En Action Script, l'objet HTTPService ne gère officiellement que les contentType application/x-www-form-urlencoded (par défaut) et application/xml. De même en MXML, pour le tag du même nom.

J'ai tout de même essayé avec le contentType text/xml. Etrangement, ça a fonctionné. En Action Script seulement, puisque qu'en MXML ça ne respecte pas le Schema.

Et voilà le résultat :

Code :
1
2
3
4
5
6
7
8
9
public function request(): void {
 
     var action: HTTPService = new HTTPService();
     action.url = "http://localhost:8081/";
     action.method = "POST";
     action.contentType = "text/xml";
     action.request = new XML(<request/>).toXMLString();
     action.send();
}
84mickael est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h47.


 
 
 
 
Partenaires

Hébergement Web