php - 获取 Instagram 帖子的 JSON

标签 php curl instagram-api

我正在尝试获取 Instagram 帖子的 json。获取数据的url:

$url = "https://www.instagram.com/p/" . $_GET['media'] . "/?__a=1";

当我在浏览器中获取此网址 - 一切正常时,返回了 json。顺便说一句,浏览器未登录 Instagram。但是当我使用curl或file_get_contents($url);时,它会返回http代码302,其中包含标题“location”到登录页面。

代码示例:

$url = "https://www.instagram.com/p/" . $_GET['media'] . "/?__a=1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json') );
$data = curl_exec($ch);
curl_close($ch);

var_dump($data);

也许应该修改curl选项以使其看起来像浏览器。

更新

我尝试了与浏览器中相同的 header ,包括 cookie,但没有运气,似乎这是不可能的。我已经使用这个 hack 编写了页面,最近停止工作了。使用 API 意味着重写所有内容,因为响应的数据不同。

最佳答案

原因很简单,您正在尝试访问受身份验证保护的网络资源(这应该是显而易见的)或通过检测非标准行为进行保护。您的curl请求失败的原因是它缺少Cookie header 或某种形式的其他 header ,用于识别您的人类身份。通常,它是识别您和您的经过身份验证的 session 的 cookie,该 cookie 受服务器信任。在某些时候,您很可能已经使用浏览器登录,这就是请求在您的浏览器中工作的原因 - 但不是curl/php逻辑,或者您缺少诸如User-Agent之类的 header 掩盖了 curl 的使用。

enter image description here 下面是一个 cookie 字符串的示例,该字符串将我标识为我自己。没有它,我将无法在浏览器中执行这些请求。因此,只要服务器发送 Set-Cookie: ... 浏览器就会接受它并保存它,跟踪它并在每个请求中发送它。

您可以从浏览器 session 中借用 cookie 并将其临时实现到您的curl 请求中,或者在发送curl 请求之前实现登录逻辑。但您应该做正确的事情并开始使用 Instagram API正如 Magnus Eriksson 在评论中指出的那样。

推荐后者,并且有一些库虽然很旧。但也许他们会给你一个如何去做的想法。

Instagram-PHP-API以库为例。

use MetzWeb\Instagram\Instagram;

$instagram = new Instagram(array(
    'apiKey'      => 'YOUR_APP_KEY',
    'apiSecret'   => 'YOUR_APP_SECRET',
    'apiCallback' => 'YOUR_APP_CALLBACK'
));

echo "<a href='{$instagram->getLoginUrl()}'>Login with Instagram</a>";

如果您想知道“API 到底是什么”,here's (Tom Scott - This Video Has X Views)一个视频很好地解释了为什么假装成人类不是一个好主意,而是使用 API。

关于php - 获取 Instagram 帖子的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61950971/

相关文章:

phpMyAdmin - 配置文件是否更改?

python - 在Python中执行cURLs命令行

node.js - 使用 FB 的新 Instagram Graph API 获取带有标签的图像

Android Instagram API 网络 :ERR_CONNECTION_REFUSED

php - QR码位置检查

PHP- MySQL 搜索条件

php - 添加没有 span 标签或标题的工具提示/气泡显示

php - curl 和 ping - 如何检查网站是启动还是关闭?

windows - 如何在 Windows 上安装和使用 cURL?

ios - Instagram API 登录错误 - 此页面无法加载