Приложения 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 раз.