views:

301

answers:

2

Here in Google App Engines I got this code that would help fetch an HTML code of any web page by its URL:

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

I don't understand one thing here (among many other things, in fact) why it is suggested in this code to import urlfecth from google.appengine.api ? Does Python not have this command onits own?

+2  A: 

google.appengine.api is a library that contains Google's version of urlfetch class. Quoting from the manual:

The URL Fetch service uses Google's network infrastructure for efficiency and scaling purposes.

Python has url retrieval classes in its standard library too, but those whould not be able to use the infrastructure that is available inside App Engine.

In short google.appengine.api urlfetch is more powerful, but there is nothing blocking from you from using Pythons own urllib either, that too is described in the manual page I linked above.

Anti Veeranna
Thanks for the explanation and for the link
brilliant
if you use httplib or urllib on appengine it also uses google's network infrastructure. iirc they were added as wrappers for urlfetch and should behave more or less as their python stdlib cousins :)
tosh
I see. Thank you.
brilliant
tosh makes a very valid point. if standard python urls also use same infrastructure the i see no point in using url fetch as it makes the app less portable when you wan to exit GAE.
mataal
+7  A: 

Python has libraries such as urllib and httplib for fetching URLs, but on App Engine, all requests must go through the custom urlfetch library. App Engine includes stubs for urllib and httplib that cause them to use urlfetch internally, but if you have a choice, using urlfetch directly is more efficient and flexible.

Nick Johnson
Thank you, Nick, for this explanation.
brilliant