2010-04-30 5 views
2

Je suis en train de convertir un code de CURL FLEX/ActionScript. Comme je suis 100% ignorant sur CURL et 50% ignorant sur Flex et 90% ignorant sur HTTP en général ... Je rencontre des difficultés importantes.Translating CURL FLEX HTTPRequests

Le code CURL suivant est de http://code.google.com/p/ga-api-http-samples/source/browse/trunk/src/v2/accountFeed.sh

J'ai toutes les raisons de croire qu'il fonctionne correctement.

 USER_EMAIL="[email protected]" #Insert your Google Account email here 
     USER_PASS="secretpass" #Insert your password here 

     googleAuth="$(curl https://www.google.com/accounts/ClientLogin -s \ 
     -d Email=$USER_EMAIL \ 
     -d Passwd=$USER_PASS \ 
     -d accountType=GOOGLE \ 
     -d source=curl-accountFeed-v2 \ 
     -d service=analytics \ 
    | awk /Auth=.*/)" 
     feedUri="https://www.google.com/analytics/feeds/accounts/default\ 
     ?prettyprint=true" 

     curl $feedUri --silent \ 
     --header "Authorization: GoogleLogin $googleAuth" \ 
     --header "GData-Version: 2" 

Voici ma tentative avortée de traduire le CURL ci-dessus pour AS3

var request:URLRequest=new URLRequest("https://www.google.com/analytics/feeds/accounts/default"); 
    request.method=URLRequestMethod.POST; 
    var GoogleAuth:String="$(curl https://www.google.com/accounts/ClientLogin -s " + 
     "-d [email protected] " + 
     "-d Passwd=secretpass " + 
     "-d accountType=GOOGLE " + 
     "-d source=curl-accountFeed-v2" + 
     "-d service=analytics " + 
     "| awk /Auth=.*/)"; 
    request.requestHeaders.push(new URLRequestHeader("Authorization", "GoogleLogin " + GoogleAuth)); 
    request.requestHeaders.push(new URLRequestHeader("GData-Version", "2")); 
    var loader:URLLoader=new URLLoader(); 
    loader.dataFormat=URLLoaderDataFormat.BINARY; 
    loader.addEventListener(Event.COMPLETE, GACompleteHandler); 
    loader.addEventListener(IOErrorEvent.IO_ERROR, GAErrorHandler); 
    loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, GAErrorHandler); 
    loader.load(request); 

Cela vous donne probablement le tout avec un bon rire, et c'est correct, mais si vous pouvez trouver pitié de moi , s'il vous plaît laissez-moi savoir ce que je manque. J'admets volontiers l'ineptie fonctionnelle, donc me faire savoir à quel point je suis stupide est optionnel.

Répondre

5

Hey, question intéressante.

curl est une commande unix, que vous souhaitez exécuter dans le terminal. Il renvoie la page HTML brute de l'URL que vous avez demandée.

Donc, vous ne pouvez pas simplement copier la commande en boucle depuis Actionscript Flash/Flex ne vous permet pas d'exécuter des scripts de ligne de commande (AIR 2.0 fait, mais ce n'est pas pertinent en l'espèce).

Le but de la commande curl est d'obtenir le jeton d'authentification de Google. Donc, tout ce que vous devez faire est de définir votre GoogleAuth variable à la suite d'une première requête HTTP à Google avec les paramètres que vous fournissez, quelque chose comme ça (code de pseudo, n'ont pas testé):

var authenticate:URLRequest = new URLRequest("https://www.google.com/accounts/ClientLogin") 
var variables:URLVariables = new URLVariables(); 
variables.Email = "[email protected]"; 
variables.Passwd = "mypass"; 
variables.accountType = "GOOGLE"; 
variables.source = "MyApplication Name"; 
variables.service = "analytics"; 
authenticate.data = variables; 
var loader:URLRequest = new URLRequest(); 
loader.addEventListener(Event.COMPLETE, authenticated); 
loader.load(authenticate); 

protected function authenticated(event:Event):void 
{ 
    var request:URLRequest=new URLRequest("https://www.google.com/analytics/feeds/accounts/default"); 
    request.method = URLRequestMethod.POST; 
    var GoogleAuth:String = event.data; 
    request.requestHeaders.push(new URLRequestHeader("Authorization", "GoogleLogin " + GoogleAuth)); 
    request.requestHeaders.push(new URLRequestHeader("GData-Version", "2")); 
    var loader:URLLoader = new URLLoader(); 
    loader.dataFormat = URLLoaderDataFormat.BINARY; 
    loader.addEventListener(Event.COMPLETE, GACompleteHandler); 
    loader.addEventListener(IOErrorEvent.IO_ERROR, GAErrorHandler); 
    loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, GAErrorHandler); 
    loader.load(request); 
} 

Alors Premièrement, vous obtenez le jeton authentifié (que vous sauvegardez puis réutilisez dans tous vos en-têtes URLRequest), puis vous appelez Google Analytics.

espoir qui aide, Lance

2

Si vous allez faire beaucoup de développement sur HTTP, vous devez également regarder dans quelque chose comme Charles Proxy ou Firebug pour déboguer et afficher vos requêtes HTTP réelles.