2012-09-24 2 views
1

У меня есть несколько различных приложений, которые требуют от меня POST-файла из Google App Engine на удаленный сайт. Я пробовал несколько подходов с urllib2, но у меня возникли проблемы с каждым подходом, так как я переместил код в GAE.Как отправить файл из Google App Engine?

Каков самый простой способ отправить файл (csv, zip и т. Д.) Из Google App Engine на удаленный веб-сайт? Как только я могу опубликовать существующий файл, я могу перейти к публикации файлов из хранилища данных.

+0

Файл является просто контейнером для байтов. В этом контексте нет ничего особенного в файлах; все зависит от того, как вы инкапсулируете данные, которые отправляются с использованием аргумента 'payload' в качестве корневых документов. –

ответ

2

Вы просмотрели urlfetch. Пример от docs.

import urllib 

from google.appengine.api import urlfetch 

with open('/file', 'r') as f: 
    data = f.read() 

result = urlfetch.fetch(url=url, 
         payload=data, 
         method=urlfetch.POST, 
         headers={'Content-Type': 'application/x-www-form-urlencoded'}) 
+0

Можете вы добавить файл к вашему примеру? Публикация файла является основной целью. – Chris

+0

Этот второй пример кода выглядит как сообщение, входящее в GAE, а не код GAE, который пытается отправить сообщение на другой веб-сайт. – Chris

+0

Мой плохой извините. Я попытаюсь опубликовать smth позже, когда у меня будет возможность проверить. – root

0

С reference,

payload: содержание тела запроса на POST или PUT.

Так просто загрузить содержимое файла и установить полезную нагрузку, а-ля

with open(filename, 'r') as fh: 
    payload = fh.read() 
response = urlfetch.fetch(url, payload=payload, method='POST') 

и делать то, что вы бы с response.

Это будет работать точно так же, как и строка из объекта хранилища данных.

EDIT: filename, вероятно, будет дорогой относительно вашего проекта. Так что, если ваш проект живет в /home/dinosaurs/sinclair на вашем локальном компьютере, и у вас есть /home/dinosaurs/sinclair/stuff/contents.xml в вашем проекте, то ваш относительный путь, который будет работать в производстве на App Engine, - stuff/contents.xml.

Смежные вопросы