Обзор

Приложения App Engine могут взаимодействовать с другими web-приложениями или выполнять запросы к сторонним ресурсам Интернета через интерфейс загрузки URL (Fetch URL). Это очень полезный механизм для доступа к внешним данным, который позволяет обмениваться информацией с web сервисами и каналами RSS.

Функция urlfetch.fetch() выполняет HTTP запрос.

from google.appengine.api import urlfetch

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

fetch() поддерживает запросы HTTP пяти типов: GET, POST, HEAD, PUT и DELETE. Ваш запрос может включать дополнительные заголовки протокола HTTP и содержимое параметров методов POST и PUT. К примеру, чтобы отправить данные, введенные в форму, обработчик использует метод POST:

import urllib

form_fields = {
  "first_name": "Albert",
  "last_name": "Johnson",
  "email_address": "Albert.Johnson@example.com"
}
form_data = urllib.urlencode(form_fields)
result = urlfetch.fetch(url=url,
                        payload=form_data,
                        method=urlfetch.POST,
                        headers={'Content-Type': 
'application/x-www-form-urlencoded'})

Все запросы к серверам ограничены портами 80 (протокол http) и 443 (протокол https). Все остальные порты не поддерживаются.

Процесс загрузки данных по URL является синхронным: выполнение функции fetch() не будет прервано, пока не будет получен ответ от удаленного сервера.

Примечание: В связи с накладываемым ограничением по необходимости подготовки приложением ответа на запрос пользователя в течении нескольких секунд, выполнение загрузки URL от сервера с медленным подключением может привести к выдаче ошибки вашим приложением. На сегодняшний день не существует возможности установить таймаут процессу загрузки URL.

Единственным способом обойти это ограничение является использование на стороне пользователя кода JavaScript, который и будет осуществлять обработку загрузки URL через отдельный метод вашего приложения и реагировать на неудачную попытку.

Платформа App Engine использует для транзита запросов прокси сервер, совместимый с протоколом HTTP/1.1. Прокси также может выполнять безопасные запросы по протоколу HTTPS, однако он не проверяет подлинность сервера, с которым соединяется. Поэтому он принимает все SSL сертификаты, включая самоподписанные.

Функция fetch() позволяет загружать документы с учетом получаемых от сервера указаний на перенаправления ссылки, которые могут повторяться до 5 раз.