我正在开发一个显示电影相关数据的GAE网络应用程序。
为了获取电影数据,我使用的是OMDB中的API(http://www.omdbapi.com/)。。Belel是我用来连接的代码片段API。
当我在本地运行它时它完全正常,但在GAE上部署时不起作用。它会抛出连接超时异常,我尝试增加连接超时时间但是没有工作。
String URLstr = "http://www.omdbapi.com/?t="+URLEncoder.encode(Request,"utf-8");
URL url=null;
URLConnection uc = null;
BufferedReader bf = null;
try {
url= new URL(URLstr);
uc = url.openConnection();
uc.setConnectTimeout(15* 1000);
bf = new BufferedReader(new InputStreamReader(uc.getInputStream()));
} catch (IOException e) {
throw new IllegalArgumentException(e.getMessage());
}
我的代码不正确吗?我错过了GAE的一些限制吗?
答案 0 :(得分:3)
您的代码看起来是正确的。几个星期前,我遇到了与OMDB API和Google App Engine完全相同的问题。我联系了关于这个运行OMDB API的Brian,我认为这与几周前滥用的App Engine IP范围有关。
我创建了以下webapp,以确定从我的应用程序中获取的url提取的外部IP地址是否显示在OMDB服务器上。我将以下内容部署到GAE以获取公共IP。
import webapp2
import logging
from google.appengine.api import urlfetch
class ifconfig(webapp2.RequestHandler):
def get(self):
url="http://ipecho.net/plain"
urlfetch.set_default_fetch_deadline(60)
result = urlfetch.fetch(url)
logging.debug("I think my external IP is %s " % result.content)
self.response.write(result.content)
app = webapp2.WSGIApplication([
('/ifconfig', ifconfig)
])
在Google App Engine中,我转到了实例选项卡并关闭了实例,并检查了新实例的外部IP。我这样做了好几次,在我看来,外部IP看起来都来自107.178.195.0/24,所以我把这些信息提供给了OMDB API。
我猜这是在被禁止的IP区块中,Brian能够解锁该范围。这解决了我的问题,并且API的请求再次开始工作。
这可能也解决了你的问题,但如果没有,你可能想知道你的公共IP是什么,并联系Brian看看它是否在被阻止的IP范围内< / p>