现在我使用自己的Java FTP程序将对象从我的PC ftp到ISP的网站服务器。
我想使用Google App Engine的servlet获取Paypal IPN消息,然后将消息存储到我自己的对象中并将对象ftp到我的ISP的网站服务器,这是可行的吗?我听说Google App Engine不支持FTP。
我不希望谷歌为我做这件事,但是我可以在我上传到App Engine的网络应用程序中使用我自己的Java FTP程序吗?
谢
答案 0 :(得分:8)
不,除非在HTTP / HTTPS上使用URL Fetch service到这些端口范围,否则无法打开任何套接字连接:
80-90,440-450,1024-65535 。
答案 1 :(得分:5)
从April 9 this year (SDK 1.7.7)开始,这不再是问题。出站套接字(例如FTP)通常适用于所有启用结算的应用。
套接字API概述(Java):https://developers.google.com/appengine/docs/java/sockets/
答案 2 :(得分:3)
更新:我们的代码可能不再有效。此FTP代码之前适用于我们,但我们现在看到一条评论,表示App Engine上不再支持FTP。请参阅以下链接。如果您尝试此代码并且它对于直接FTP(TLS不支持BTW)有效或不起作用 - 请发表评论。
是。 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导入FTP_TLS”失败。)
答案 3 :(得分:-1)
如果将其置于被动模式,则可以使用Apache Commons FTP客户端(org.apache.commons.net.ftp.FTPClient)。只需执行以下操作:
FTPClient client = new FTPClient();
client.connect(FTP_HOST);
client.enterLocalPassiveMode();
然后它不会调用ServerSocketFactory,生活应该很好!