2011-10-06 51 views
14

我有一个http://网站,需要访问暴露在https://网站上的第三方JSON API。我已经通过阅读Ways to circumvent the same-origin policy,但似乎描述的方法有没有适合我:如何绕过第三方https站点的同源策略?

  1. 的document.domain的方法 - 仅适用于子域。
  2. 的跨来源资源共享方法 - 需要服务器合作。
  3. 的window.postMessage方法 - 似乎需要打开一个弹出窗口?
  4. 反向代理方法 - 一个可能的解决方案,但似乎有点太难设置。
  5. http://anyorigin.com - 似乎不支持SSL。

是这个吗?我必须实施解决方案4,这看起来相当复杂,还是我错过了什么?

+3

你能不能从其他网站用普通的PHP页面卷曲的结果在自己的域,然后从该PHP页面抓取JSON? –

+0

不会[JSONP](http://en.wikipedia.org/wiki/JSONP)在这里工作吗? – jwueller

+0

我很确定anyorigin.com支持SSL。尝试提取'https:// test.kems.net /',例如 - 它工作得很好。 –

回答

12

对不起真正的基本书面记录,似乎anyorigin.com 确实支持HTTPS。

我天真地认为它没有的原因是,因为API in question返回JSON,我以为我实际上只是得到一个纯文本响应(如我在google.com上使用anyorigin.com的测试)。当它只返回一个object时,我觉得有些东西坏了。

看来对象只是返回解析的JSON,所以我很好走!

更新 - anyorigin.com停止与一些https网站工作几个星期后,我张贴了这一点,所以我继续写whateverorigin.org,一个开源替代品anyorigin。

+0

@RobW - 请在github上打开一个问题。我会调查这上周五(什么都不能承诺早) - 如果远程服务器返回基于谁要求不同的东西的内容https://github.com/ripper234/Whatever-Origin – ripper234

+0

这些方法将无法正常工作。例如YouTube上返回的视频,从中可以提取播放网址为说MP4只会工作(比如获取为.MP4​​文件),如果从呼叫者使用,不来电的客户端(当来电者是一个网页代理) –

+0

**我在这里写了一个关于这个问题的答案: [jQuery AJAX加载跨域html页面](http://stackoverflow.com/questions/15005500/loading-cross-domain-html-page-with -jquery阿贾克斯/ 17299796#17299796)** - _The最后一个,支持https_ – jherax

0

JSONP应该在你的列表中,并且更高。非常标准。它需要服务器合作,但大多数API都应该知道他们在做什么并支持它。

here是如何工作的

3

您可以使用Ajax交叉来源的jQuery插件。有了这个插件,你可以使用jQuery.ajax()跨域。

这是非常简单的使用方法:

$.ajax({ 
     crossOrigin: true, 
     url: url, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 

你可以在这里阅读更多:http://www.ajax-cross-origin.com/