【问题标题】:loading of Cross-origin images from Facebook从 Facebook 加载跨域图像
【发布时间】:2012-12-21 22:39:11
【问题描述】:

我正在建立一个经常从 facebook 加载图片的网站。 我一直在尝试使用来自Mozilla 的本教程,它在本地运行良好,但是当我上线时,facebook 不允许我访问这样的图像并返回:

“跨域资源共享策略拒绝跨域图像加载。”

有没有办法解决这个问题(不涉及缓冲我自己的服务器的图像)?

【问题讨论】:

    标签: javascript facebook facebook-graph-api cors


    【解决方案1】:

    有没有办法解决这个问题(不涉及缓冲我自己的服务器的图像)?

    没有。图像需要在您控制的服务器上(或者您对授予权限的任何人有足够的影响力)。您不能在 Facebook 的服务器上设置 CORS 标头,因此当它们托管在那里时,图像将无法跨域访问。

    【讨论】:

      【解决方案2】:

      您可能必须拥有他们的 API 密钥才能执行此操作。咨询https://developers.facebook.com/docs/reference/api/

      如果您想访问可以从浏览器访问的跨域内容,请使用 PHP 中的 CURL 并使用它调用站点。我将使用简单的 php curl 脚本更新答案。你可以用它来下载图片,它就像一个代理:)

      <?php
      
      $url = $_GET['url'];
      
      function request($url) {  
          $c = curl_init();
          curl_setopt($c, CURLOPT_URL, $url);
          curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 3);
          curl_setopt($c, CURLOPT_TIMEOUT, 5);
          $response = curl_exec($c);
          $responseInfo = curl_getinfo($c);
          curl_close($c);
          if (intval($responseInfo['http_code']) == 200) {
              return $response;
          } else {
              return false;
          }
      }
      
      echo request($url);
      
      ?>
      

      【讨论】:

      • 谢谢,但您能解释一下 API 密钥如何提供帮助吗?我的意思是,除非 facebook 启用了 CORS,否则通常不允许从远程域(此处为该图像的像素)访问内容。您的链接只讨论了 Graph API,但这已经很好了。问题是我正在尝试使用 localStorage.setItem 下载图像,因此我假设我必须对 img.crossOrigin 做一些事情,或者它根本不起作用。但是,无论是否支持此 CORS,我都无法在网络上找到任何内容。
      • 如果您想访问可以从浏览器访问的跨域内容,请使用 PHP 中的 CURL 并使用它调用站点。我将使用简单的 php curl 脚本更新答案。
      猜你喜欢
      • 2011-12-01
      • 2011-06-30
      • 2012-04-14
      • 2014-06-25
      • 1970-01-01
      • 2013-08-02
      • 2013-12-08
      • 2019-12-26
      • 2012-05-07
      相关资源
      最近更新 更多