Поддерживает ли Google App Engine ftp? - PullRequest
8 голосов
/ 22 апреля 2010

Теперь я использую свою собственную программу Java FTP для передачи объектов ftp с моего компьютера на сервер веб-сайта моего провайдера.

Я хочу использовать сервлет Google App Engine для получения IPN-сообщений Paypal, а затем сохранять их в моих собственных объектах и ​​передавать их на сервер веб-сайта моего интернет-провайдера, это выполнимо? Я слышал, что Google App Engine не поддерживает FTP.

Я не ожидаю, что Google сделает это за меня, но могу ли я использовать свою собственную программу Java FTP в веб-приложении, которое я загружаю в App Engine, чтобы сделать это?

Frank

Ответы [ 4 ]

8 голосов
/ 22 апреля 2010

Нет, вы не можете открыть какое-либо сокетное соединение, кроме как с помощью URL Fetch служба по HTTP / HTTPS для следующих диапазонов портов:

80-90, 440-450, 1024-65535 .

5 голосов
/ 01 августа 2013

По состоянию на 9 апреля этого года (SDK 1.7.7) это больше не проблема.Исходящие сокеты (например, FTP) обычно доступны для всех приложений с поддержкой биллинга.

Обзор API сокетов (Java): https://developers.google.com/appengine/docs/java/sockets/

3 голосов
/ 09 октября 2014

ОБНОВЛЕНИЕ: наш код ниже может больше не работать.Этот код 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" не удалась.)

0 голосов
/ 02 апреля 2014

Вы можете использовать FTP-клиент Apache Commons (org.apache.commons.net.ftp.FTPClient), если переведите его в пассивный режим. Просто сделайте следующее:

    FTPClient client = new FTPClient();
    client.connect(FTP_HOST);
    client.enterLocalPassiveMode();

Тогда он не будет вызывать ServerSocketFactory, и жизнь должна быть хорошей!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...