从第三方获取JSON数据并绕过SOP

时间:2011-05-24 13:47:35

标签: java ajax google-app-engine gwt jsonp

同源策略阻止我从其他网站(获得许可)获取我需要的JSON数据。我看到一个人正在使用JsonpRequestBuilder解决这个问题,但我不确定这对我来说是否是最好的解决方案。我想到的唯一其他选择是在我的服务器上安装一个中间servlet。

这里最好的选择是什么?我对这两种方法都有顾虑。有了中间servlet,我担心会引入延迟。使用JsonpRequestBuilder,看起来我必须为我将从其他站点调用的每个方法创建一个完整的JavascriptObject,即使我只需要从其中一些方法中提取单个值。

3 个答案:

答案 0 :(得分:2)

我不使用Java,但JSONP是我在需要跨域聊天时通常实现的,我相信有人会创建一个可以解开它的Java库。它需要对第三方网站进行更改,但这是一个非常简单的更改。

编辑:听起来就像那个图书馆所做的那样,抱歉......但仍然......这是要走的路:) :( / p>

答案 1 :(得分:1)

查看CORS Specification。我们正在使用它来使用我们自己的服务器成功绕过SOP,使用GWT的devmode Jetty。

答案 2 :(得分:1)

你不必“创建一个完整的JavaScriptObject”,JavaScriptObject实际上只是从Java世界调用到JavaScript的一种手段,所以你只需要一个getter来获取你的价值需要,它甚至可以返回一个“嵌套”值:

public native String getFoo() /*-{
    return this.nested[0].obj.foo;
}-*/;

您是否将使用JSONP(和JsonpRequestBuilder)或“代理servlet”实际上仅取决于您需要调用的“服务”的功能:JSONP是JavaScript,而不是JSON,因此服务器必须返回“ JSONP响应脚本“或者您将无法使用JsonpRequestBuilder(类似地,如果服务器返回”JSONP脚本“而不是{{1},您将无法(安全地)使用CORS或代理servlet。 })。