【问题标题】:If I dont use this code the instagram image is never displayed如果我不使用此代码,则永远不会显示 instagram 图像
【发布时间】:2021-07-28 19:02:57
【问题描述】:

仅当我使用此代码时,图片才会显示在我的网站中...

<?php
$remoteImage = "https://scontent-frt3-2.cdninstagram.com/v/t51.2885-19/s150x150/67310557_649773548849427_4130659181743046656_n.jpg?tp=1&_nc_ht=scontent-frt3-2.cdninstagram.com&_nc_ohc=M1hegfYF3_AAX9GkTGH&edm=AAuNW_gBAAAA&ccb=7-4&oh=50ba784cd64600a025031f7fc00740c1&oe=60BAEE93&_nc_sid=498da5";
$imginfo = getimagesize($remoteImage);
header("Content-type: {$imginfo['mime']}");
readfile($remoteImage);
?>

但是如果使用这个:

<?php 
$link = "https://scontent-frt3-2.cdninstagram.com/v/t51.2885-19/s150x150/67310557_649773548849427_4130659181743046656_n.jpg?tp=1&_nc_ht=scontent-frt3-2.cdninstagram.com&_nc_ohc=M1hegfYF3_AAX9GkTGH&edm=AAuNW_gBAAAA&ccb=7-4&oh=50ba784cd64600a025031f7fc00740c1&oe=60BAEE93&_nc_sid=498da5";
echo "<img src='$link'>"; 
?>

它显示损坏的图像,如下所示:https://i.imgur.com/ufJHy1n.png 并且它只发生在 instagram 图像中,因为 url 的结尾不像 xxxx.jpg 请帮忙!

【问题讨论】:

  • 查看浏览器开发者工具中的网络标签。该特定图像的响应说明了什么? Instagram 可能不喜欢它的图片被热链接。
  • 感谢您的回答,我可以保存图像并调用它来解决这个问题吗?

标签: php image echo readfile cross-origin-resource-policy


【解决方案1】:

如果您使用浏览器的控制台来实际调试整个事情,您就会得到答案。

关于您的变体:

  1. 正在将实际图像下载到您的服务器并输出二进制内容。
  2. 正在使用img标签嵌入图片,因此客户端将直接从Instagram的CDN请求图片。

变体 2) 不起作用的原因很简单:

我将在这里引用 Chrome 的开发工具:

要使用来自不同来源的资源,服务器可以放宽 跨域资源策略响应头: Cross-Origin-Resource-Policy: same-site 选择此选项,如果 资源和文档是从同一个站点提供的。 Cross-Origin-Resource-Policy: cross-origin 仅在以下情况下选择此选项 包含此资源的任意网站不会强加 安全风险。

Instagram 的 CDN 策略设置为 cross-origin-resource-policy: same-origin - 拒绝来自其他来源的请求。更多相关信息请见here。

可以在here 找到关于什么是 Origin(即方案 + 主机 + 端口)的示例。

【讨论】:

  • 感谢您的回答,有什么办法可以解决这个问题吗?
  • 可能通过使用他们的API
  • 好的,谢谢,我有一个问题:为什么我可以使用第一个代码?
  • 有没有办法使用该代码来获取和播放图像?
  • 第一个代码是将图像下载到您的服务器,对于少量图像,您可能可以这样做。但是您可能只需要$image = file_get_contents($url) - 但是,我猜您的服务器的 IP 地址可能会在短时间内被 Instagram 屏蔽。
猜你喜欢
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多