В обычном коде Python, я бы, вероятно, использовал нижний уровень httplib , например ::
import httplib
domains = 'google.com gmail.com appspot.com'.split()
for domain in domains:
conn = httplib.HTTPConnection(domain)
conn.request('GET', '/')
resp = conn.getresponse()
print 'Code %r from %r' % (resp.status, domain)
это покажет вам такие коды, как 301 (перемещено навсегда) и 302 (перемещено временно); библиотеки более высокого уровня, такие как urllib2
, будут обрабатывать такие вещи «за кулисами» для вас, что удобно, но затрудняет простое управление (вы должны установить свои собственные объекты «открытия URL» и т. д.). ).
В App Engine вам, вероятно, лучше использовать urlfetch , который возвращает объект ответа с атрибутом status_code
. Если этот атрибут 401, это означает, что вам нужно повторить выборку с соответствующего вида информации авторизации в заголовках.
Однако App Engine теперь также поддерживает urllib2, поэтому, если вам удобно использовать этот более высокий уровень абстракции, вы можете делегировать работу ему. См. здесь для получения руководства о том, как делегировать базовую аутентификацию для urllib2, и здесь для более общего руководства о том, как работает базовая аутентификация (я полагаю, что понимание того, что происходит на нижнем уровне абстракции поможет вам, даже если вы используете верхний слой! -).