Sfat rapid utilizând Google App Engine ca server proxy

Google App Engine poate fi folosit ca o modalitate gratuită și convenabilă în jurul fișierelor de politici de domeniu restrictive sau care lipsesc. Acest tutorial vă va arăta cum să creați un proxy GAE care să ofere acces la resurse restricționate pentru aplicația dvs. Flash.


Rezultatul final al rezultatelor

Să aruncăm o privire asupra rezultatului final pe care îl vom strădui:

A trimis doar câteva date de testare într-o foaie de calcul la distanță găzduită pe Google Docs. Acest lucru nu ar funcționa fără un fișier crossdomain.xml pe domeniul de destinație - totuși, fișierul politicii de domeniu încrucișat din Google Docs nu permite acest lucru și nu îl pot schimba. Citiți mai departe pentru a afla cum a fost făcut acest lucru.


De ce să folosiți un proxy?

În ultimul meu sfat rapid Un ghid pentru fișierele de politică Cross Domain I-am arătat cum sunt utilizate fișierele de politică de domeniu încrucișat de către Flash pentru a determina ce date pot fi accesate de la domenii la distanță. Deși este capabil să controleze accesul la resurse este excelent pentru administratori, este o durere pentru dezvoltatorii Flash care încearcă să acceseze datele de pe un server care nu are un fișier de politică cu domeniu transversal, deoarece nici un fișier de politică nu înseamnă nici un acces. Configurarea unui fișier de politică transfrontalieră poate fi cu ușurință trecută cu vederea și am parcurs mai mult de un furnizor de servicii web care nu a gândit să răspundă dezvoltatorilor Flash.

Am menționat, de asemenea, că problema a fost ușor eludată prin utilizarea unui proxy. Ideea din spatele unui proxy este că va accepta conectarea de la aplicațiile Flash la distanță (prin furnizarea fișierului crossdomain.xml corespunzător), apoi va acționa ca intermediar în transmiterea datelor înainte și înapoi. Singura cerință reală a unui server proxy (care se referă la Flash) este că ar trebui să poată accesa resurse publice indiferent de permisiunile care pot sau nu pot fi acordate de o politică de domenii intermediare.

Vestea foarte bună este că puteți configura un astfel de proxy fără costuri frontale utilizând Google App Engine (GAE). GAE va găzdui o aplicație web și presupunând că cerințele dvs. de trafic sunt sub pragul lor, nu există nicio taxă. Ceea ce voi demonstra aici este cum să creați o aplicație web GAE simplă care să poată acționa ca proxy, permițând aplicațiilor Flash să acceseze resurse care altfel ar fi în afara limitelor.


Pasul 1: Foi de calcul Google și Crossdomain.xml Dreaded

Există o caracteristică cu adevărat elegantă în Google Docs, care vă permite să creați un formular web care poate fi utilizat pentru a popula o foaie de calcul. Am creat doar un astfel de formular aici, rezultatele acestui formular fiind publicate aici ca o pagină web publică. Formularul este un formular HTML standard, care poate fi trimis în mod programatic folosind o operație standard POST POST.

Am fost recent într-o poziție în care trebuia să colectez ceva feedback dintr-o aplicație Flash pe care o distribuisem. Aceste forme păreau o modalitate foarte bună de a face acest lucru. Nu existau costuri de găzduire pentru mine, rezultatele ar putea fi ușor analizate direct de către foaia de calcul și aș fi destul de sigur că un serviciu Google precum Docs ar fi fiabil. Singura problemă a fost politica de domenii intermediare.

    

Acest fișier de politică specială nu permite accesul la http://spreadsheets.google.com/ domeniu pentru aplicațiile Flash la distanță. Și, cu siguranță, dacă încercați să trimiteți un formular din Flash, acesta va eșua.

Acesta este un exemplu perfect în care un proxy poate ajuta.


Pasul 2: Creați o aplicație GAE

Înscrieți-vă pentru un cont App Engine. Vi se va cere să creați o nouă aplicație. Aici am creat o aplicație numită activetutsproxydemo. Va trebui să alegeți propriul nume de aplicație unic.


Pasul 3: Obțineți SDK-ul GAE

Descărcați și instalați SDK App Engine. Aceasta va instala o aplicație numită Google App Engine Launcher. Rulați-l și faceți clic pe Fișier | Creați o aplicație nouă ...

Introduceți numele aplicației pe care ați creat-o în Pasul 1, selectați o locație pentru a fi stocate fișierele aplicației și faceți clic pe Crea buton.


Pasul 4: Modificați fișierul principal.py

Lansatorul de aplicații Google App Engine va crea o aplicație implicită pentru dvs. în directorul pe care l-ați specificat. Ar trebui să vedeți un fișier numit main.py. Suprascrieți conținutul acestui fișier cu următorul cod Python:

 de la google.appengine.ext import webapp de la google.appengine.ext.webapp.util import run_wsgi_app import urllib de la google.appengine.api import urlfetch class GoogleForm (webapp.RequestHandler): def post (auto): destinationURL = "http: / /spreadsheets.google.com/formResponse?formkey=dHh4VTRVbGtSM3ZycUtpbEFKSUJ2Znc6MA&ifq "form_fields = " entry.0.single ": self.request.get ('entry.0.single')," entry.1.single ": self.request .get ('entry.1.single'), 'entry.2.single': self.request.get ('entry.2.single'), 'entry.3.single': self.request.get (' (formular_fields) result = urlfetch.fetch (url = destinationURL, încărcătură utilă), "pageNumber": "0", "backupCache" = form_data, method = urlfetch.POST, headers = 'Content-Type': 'application / x-www-form-urlencoded' .headers ['Content-Type'] = 'text / xml' auto.response.out.write ("   ")" aplicație = webapp.WSGIApplication () ('/ googleform', GoogleForm), ('/crossdomain.xml', CrossDomain)], debug = True) def main (): run_wsgi_app __main__ ": main ()

Puteți găsi mai multe informații despre modul în care funcționează acest cod în documentația GAE, dar voi evidenția biții importanți aici.

Această linie spune că GoogleForm clasa va fi executat atunci când adresa http://youapplicationname.appspot.com/googleform este accesată și Între domenii clasa va fi executată când adresa http://youapplicationname.appspot.com/crossdomain.xml este accesată.

aplicație = webapp.WSGIApplication ([('/ googleform', GoogleForm), ('/crossdomain.xml', CrossDomain)], debug = True)

Între domenii clasa va afișa un fișier de politică cu domeniu transversal care permite accesul deplin la domeniu prin aplicații Flash la distanță.

 clasa CrossDomain (webapp.RequestHandler): def get (auto): self.response.headers ['Content-Type'] = 'text /   "" ")

GoogleForm clasa este folosită pentru a transmite solicitarea HTTP POST primită în formularul Google Docs.

clasa GoogleForm (webapp.RequestHandler): def post (auto):

destinationUrl variabila defineste URL-ul la care se va posta formularul (nu, aceasta nu este aceeasi cu cea folosita pentru vizualizarea formularului, ci mai degraba adresa URL atribuita formă Etichete acțiune atribut.

destinationURL = "http://spreadsheets.google.com/formResponse?formkey=dHh4VTRVbGtSM3ZycUtpbEFKSUJ2Znc6MA&ifq"

form_fields variabila vizează variabilele HTTP POST primite cu cele care trebuie furnizate în formularul Google.

form_fields = "entry.0.single": self.request.get ('entry.0.single'), 'entry.1.single': self.request.get ('entry.1.single'), ("input.2.single"), "entry.3.single": self.request.get ("entry.3.single"), "pageNumber": " 0 "," backupCache ":" "," trimite ":" Trimiteți "

Datele din câmpuri sunt codate pe adrese URL. Acest lucru este puțin redundant, deoarece acestea ar trebui deja să fie codificate de aplicația Flash atunci când sunt trimise, dar nu face rău pentru a vă asigura că.

form_data = urllib.urlencode (form_fields)

Datele sunt apoi re-postate pe serverele Google, iar rezultatul este salvat în rezultat variabil.

rezultatul = urlfetch.fetch (url = destinationURL, payload = form_data, method = urlfetch.POST, headers = 'Content-Type': 'application / x-www-form-urlencoded')

Rezultatul este apoi imprimat, ceea ce are ca efect trimiterea lui înapoi la aplicația Flash.

rezultatul imprimării

Pasul 5: încărcați aplicația

Selectați aplicația dvs. GAE din Google Launcher Motor App și faceți clic pe butonul Deployment.

Veți fi solicitați acreditările dvs. Google, iar apoi aplicația va fi încărcată.


Pasul 6: Testați-vă aplicația

Accesați http://yourapplicationname.appspot.com/crossdomain.xml (puteți vedea aici fișierul meu crossdomain.xml). Dacă totul a mers bine, ar trebui să vedeți un fișier XML (poate fi necesar să vedeți sursa paginii pentru a vedea fișierul de politică).

Dacă vedeți ceva similar cu imaginea de mai sus, aplicația web GAE este în curs de funcționare.


Pasul 7: Accesarea formularului cu Flex

Fișierul MXML de mai jos este un exemplu despre modul de efectuare a unei acțiuni HTTP POST utilizând HTTPService clasă.

     

variabile Variabila varsă numele variabilelor POST la datele care vor fi trimise.

var variabile: Object = Object nou (); variabilele ["entry.0.single"] = "test0"; variabile ["entry.1.single"] = "test1"; variabile ["entry.2.single"] = "test2"; variabile ["entry.3.single"] = "test3";

Apoi vom crea o nouă instanță a HTTPService clasă.

var serviciu: HTTPService = HTTPService nou ();

Trebuie să specificăm adresa URL la care vom fi trimisi. Pentru acest prim test, vom încerca direct trimiterea la formularul Google. Acest lucru va eșua, dar este o bună demonstrație a motivului pentru care trebuie să folosim un proxy în primul rând.

service.url = "http://spreadsheets.google.com/formResponse?formkey=dHh4VTRVbGtSM3ZycUtpbEFKSUJ2Znc6MA&ifq";

Spunem HTTPService obiect că ne așteptăm ca textul simplu să răspundă.

service.resultFormat = HTTPService.RESULT_FORMAT_TEXT;

Trebuie, de asemenea, să le spunem HTTPService obiect pe care dorim să efectuăm o operație HTTP POST.

service.method = "POST";

Unii operatori de evenimente sunt pregătiți pentru a ne comunica dacă operația a avut succes sau nu.

service.addEventListener (ResultEvent.RESULT, function (event: ResultEvent): void Alert.show ("Datele au fost trimise cu succes!");); service.addEventListener (FaultEvent.FAULT, funcție (eveniment: FaultEvent): void Alert.show ("A apărut o eroare!"););

În cele din urmă, trimitem datele.

service.send (variabile);

Pasul 8: Compilați aplicația

Dacă compilați și rulați aplicația folosind butonul cu săgeata verde de pe ea, veți găsi că funcționează.

Deci, care este marele lucru? De ce să mergeți la toate necazurile de a crea un proxy? Aplicația va funcționa pe mașina dvs. locală deoarece directorul / bin-debug / în cazul în care Flex plasează SWF compilat este o locație de încredere. Aceasta înseamnă că aplicația va putea accesa serverul Google. Pentru a simula modul în care aplicația ar funcționa pe un site web, deși aveți nevoie pentru a compila o versiune de lansare.

Acum, când rulați SWF din directorul / bin-release /, veți vedea că operația a eșuat. Acesta este modul în care SWF va acționa atunci când este încărcat pe un site Web.


Pasul 9: Utilizarea proxy-ului

Utilizarea proxy-ului GAE este un caz simplu de schimbare a adresei URL care este atribuită HTTPService obiect.

service.url = "http://activetutsproxydemo.appspot.com/googleform";

Acum, când executați aplicația, fie din directoarele bin-debug sau bin-release, operația se va încheia cu succes.


Concluzie

Crearea unei aplicații proxy Google Engine Engine vă va permite să accesați cu ușurință resursele pe servere care altfel ar exclude aplicațiile Flash. Atâta timp cât aplicația dvs. nu solicită resurse masive, trebuie să constatați că nu veți trece pragurile pentru serviciul GAE gratuit.

Cu toate acestea, nu fiți tentați să creați un proxy mai generalizat. Deși ar fi posibil să se creeze un proxy care să folosească o variabilă specială pentru a determina adresa URL de destinație, făcând aplicația capabilă să acționeze ca un proxy pentru orice resursă, un astfel de server ar fi exploitat rapid de alți dezvoltatori. Aici am codificat greu adresa URL de destinație, ceea ce înseamnă că în cel mai rău caz, cineva ar putea folosi acest proxy pentru a transmite date către formularul Google Docs. Acest lucru îl face puțin folos pentru oricine altcineva și reduce probabilitatea abuzării serviciului.

Sper că ți-a plăcut acest tutorial, mulțumesc pentru lectură!

Cod