2009-12-12 13 views
7

Here in Google App Engines ho ottenuto questo codice che avrebbe aiutato a recuperare un codice HTML di qualsiasi pagina web con il suo URL:Perché importare urlfetch da Google App Engines?

from google.appengine.api import urlfetch 
url = "http://www.google.com/" 
result = urlfetch.fetch(url) 
if result.status_code == 200: 
doSomethingWithResult(result.content) 

Non capisco una cosa qui (tra le altre cose, appunto) il motivo per cui si suggerisce in questo codice per importare urlfecth da google.appengine.api? Python non ha questo comando sul proprio?

risposta

5

google.appengine.api è una libreria che contiene la versione di urlfetch di Google. Citando from the manual:

l'URL del servizio Fetch utilizza l'infrastruttura network di Google per l'efficienza e scopi di scala.

Python ha anche classi di recupero url nella sua libreria standard, ma quelle non potrebbero essere in grado di utilizzare l'infrastruttura disponibile in App Engine.

In breve google.appengine.api urlfetch è più potente, ma non vi è nulla che impedisca l'utilizzo di Python proprio urllib, anch'esso descritto nella pagina di manuale che ho collegato sopra.

+0

Grazie per la spiegazione e per il collegamento – brilliant

+2

se si utilizza httplib o urllib su appengine utilizza anche l'infrastruttura di rete di google. iirc sono stati aggiunti come wrapper per urlfetch e dovrebbero comportarsi più o meno come i loro cugini stdlib python :) – tosh

+0

Vedo. Grazie. – brilliant

16

Python dispone di librerie come urllib e httplib per il recupero degli URL, ma su App Engine, tutte le richieste devono passare attraverso la libreria urlfetch personalizzata. App Engine include stub per urllib e httplib che li inducono a usare internamente urlfetch, ma se hai una scelta, usare urlfetch direttamente è più efficiente e flessibile.

+1

Grazie, Nick, per questa spiegazione. – brilliant

+0

Fonte? È per motivi di sicurezza che non ti permettono di effettuare chiamate di rete senza utilizzare l'URL Fetch? – irwinb

+5

@irwinb Fonte: ho lavorato al team App Engine per oltre 4 anni. Il motivo è una combinazione delle implicazioni di sicurezza dell'accesso socket senza restrizioni e dei problemi pratici che arrivano dall'app in esecuzione su un computer che non parla direttamente con il mondo esterno. –

Problemi correlati