Поддерживает ли Google App Engine ftp?
Теперь я использую свою собственную программу Java FTP для передачи объектов ftp с моего компьютера на сервер веб-сайта моего провайдера.
Я хочу использовать сервлет Google App Engine для получения IPN-сообщений Paypal, а затем сохранять их в своих объектах и передавать их на сервер веб-сайта моего провайдера, это выполнимо? Я слышал, что Google App Engine не поддерживает FTP.
Я не ожидаю, что Google сделает это за меня, но могу ли я использовать свою собственную программу Java FTP в веб-приложении, которое я загружаю в App Engine, чтобы сделать это?
Фрэнк
4 ответа
Нет, вы не можете открыть какое-либо сокетное соединение, кроме как с помощью службы URL Fetch по HTTP/HTTPS для следующих диапазонов портов:
80-90, 440-450, 1024-65535.
С 9 апреля этого года (SDK 1.7.7) это больше не проблема. Исходящие сокеты (например, FTP) обычно доступны для всех приложений с поддержкой биллинга.
Обзор API сокетов (Java): https://developers.google.com/appengine/docs/java/sockets/
ОБНОВЛЕНИЕ: наш код ниже может больше не работать. Этот код FTP работал для нас раньше, но теперь мы видим комментарий, который говорит, что FTP больше не поддерживается в App Engine. Смотрите ссылку ниже. Если вы попробуете этот код, и он работает или не работает для вас на прямом FTP (TLS НЕ поддерживается), пожалуйста, прокомментируйте.
Да. FTP теперь работает в Google App Engine. (Принятый ответ устарел и больше не соответствует действительности.)
Вот проверенный и работающий код на GAE.
#!/usr/bin/env python
from google.appengine.ext import webapp
from ftplib import FTP
class HwHandler(webapp.RequestHandler):
def get(self):
self.response.out.write('FTP Starting...<br>')
ftp = FTP('ftp_site.com')
ftp.login('login', 'password')
ftp.retrlines('LIST') # list directory contents
self.response.out.write('FTP opened')
ftp.quit()
app = webapp.WSGIApplication([
('/', HwHandler)
], debug=True)
Следует отметить, что FTP TLS в настоящее время не работает. (Попытка сделать "из ftplib import FTP_TLS" не удалась.)
Вы можете использовать FTP-клиент Apache Commons (org.apache.commons.net.ftp.FTPClient), если переведите его в пассивный режим. Просто сделайте следующее:
FTPClient client = new FTPClient();
client.connect(FTP_HOST);
client.enterLocalPassiveMode();
Тогда он не будет вызывать ServerSocketFactory, и жизнь должна быть хорошей!