使用Python从Google App Engine发起外部FTP请求

3 投票
3 回答
885 浏览
提问于 2025-04-16 03:28

我需要发起一个外部的FTP请求来获取一些小文件。一共有6个文件,每个文件都小于10K,而且我只需要每隔几个小时获取一次。

当我尝试用 urllib2.urlopen("ftp://xxx.xxx.xxx") 来做这个时,出现了一个错误,提示AttributeError: 'module' object has no attribute 'FTP_PORT'。

我查阅了文档,发现你只能从应用引擎发起HTTP和HTTPS请求,遗憾的是,我的应用需要获取FTP数据,这是不是意味着我根本不能使用应用引擎呢?我真心希望不是这样。

那么这里有没有人找到过其他方法来发起FTP请求,可能是通过付费账户?如果没有,其他人都选择了什么呢?Azure或者EC2是否允许外部的FTP请求?

3 个回答

0

drivehq.com 是另一个选择。它提供了网页和FTP服务器的功能。所以我需要对接的一个第三方(只支持FTP)会通过FTP上传文件。然后我会在appengine上使用urlfetch来获取这些文件。

2

这个限制以前让我很头疼;为了动态创建EC2从属工作者来转发FTP数据,搞得我觉得真是浪费时间。幸运的是,从今年4月9日(SDK 1.7.7)开始,这个问题就解决了。现在,所有启用了计费的应用都可以使用外发套接字(比如FTP)。

套接字API概述(Python):https://developers.google.com/appengine/docs/python/sockets/

5

你说得对。Google App Engine不允许你使用FTP请求。即使是付费账户也不行。

我不得不在EC2上使用一个LAMP实例,通过CURL来处理FTP请求,然后从GAE发起HTTP请求到这个实例。

撰写回答