You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Curl请求Instagram媒体接口遭限制,求解决方案

问题描述

我尝试请求以下链接获取Instagram媒体内容:

https://www.instagram.com/p/D?__a=1&__d=dis

多次请求后收到错误响应:

{"message":
    "Please wait a few minutes before you try again.",
    "require_login":true,
    "status":"fail"
}

我已经尝试用Curl配置请求解决,但没效果,求可行的解决思路。我的PHP Curl代码如下:

<?php

header("Access-Control-Allow-Origin: *");

$arrSetHeaders = array(
  'origin: https://www.instagram.com',
  'authority: www.instagram.com',
  'upgrade-insecure-requests: 1',
  'Host: www.instagram.com',
  'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
  'accept-encoding: gzip, deflate, br',
  'accept-language: en-GB,en;q=0.9',
  'cache-control: max-age=0',
  'sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"',
  'sec-fetch-dest: document',
  'sec-fetch-mode: navigate',
  'sec-fetch-site: same-origin',
);

$ch = curl_init("https://www.instagram.com/p/D?__a=1&__d=dis");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36");
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "/temp/cookies.txt" );
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/temp/cookies.txt" );
curl_setopt($ch, CURLOPT_HTTPHEADER, $arrSetHeaders, "*");
curl_setopt($ch, CURLOPT_REFERER, 'https://www.instagram.com/accounts/login/');
curl_setopt($ch, CURLOPT_COOKIE, "set-cookie: csrftoken=???; set-cookie: ds_user_id=???; set-cookie: sessionid=???");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);

echo '<pre style="word-wrap: break-word; white-space: pre-wrap;">' . $data . '</pre>';
可行解决思路

1. 修复Cookie配置错误

你的CURLOPT_COOKIE参数格式完全错误:

  • 不需要加set-cookie:前缀,直接写键值对,比如csrftoken=XXX; ds_user_id=XXX; sessionid=XXX
  • CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE已经在处理Cookie持久化,不要重复用CURLOPT_COOKIE手动设置,两者冲突会导致Cookie失效,建议删除CURLOPT_COOKIE这一行,让Curl自动管理Cookie。

2. 模拟真实用户请求流程

Instagram反爬会检查请求连贯性,不要直接请求目标链接,按以下步骤执行:

  1. 先请求Instagram首页(https://www.instagram.com/),获取初始csrftoken和Cookie
  2. 再请求登录页面(https://www.instagram.com/accounts/login/),更新Cookie
  3. 最后请求目标媒体链接,确保请求链符合真实用户访问路径

3. 添加请求间隔限制

你收到的是典型的频率限制错误,必须控制请求频率:

  • 每次请求间隔至少5-10秒,避免短时间大量请求触发限流
  • 批量请求时用随机间隔(如3-15秒),更贴近真实用户行为

4. 优化请求头合理性

  • 你的sec-fetch-site设为same-origin,但第一次请求目标链接时referer是登录页,应该改为cross-site或直接去掉这个头,让Curl自动生成
  • 删除upgrade-insecure-requests: 1,因为请求的是JSON接口,不是HTML页面,该头不符合场景
  • 开启Curl自动处理压缩:添加curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate, br');,确保accept-encoding设置的编码能被正确解析

5. 使用有效登录Cookie

如果目标内容需要登录访问,需获取真实有效的登录Cookie:

  • 手动登录Instagram浏览器,打开开发者工具Application面板,复制csrftoken、sessionid、ds_user_id的Cookie值
  • 将这些值正确写入Cookie文件,或通过CURLOPT_COOKIE设置(注意格式)
  • Cookie有有效期,过期后需重新获取

6. 更换API参数

__a=1和__d=dis是Instagram旧版非公开API参数,现已逐渐废弃:

  • 建议尝试官方公开的Graph API(需申请开发者账号)
  • 或从真实浏览器请求中提取最新的非公开接口参数(如__ccg=UNKNOWN&__rev=1004404298&__s=XXX&__hsi=XXX)

内容的提问来源于stack exchange,提问作者Oreo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:45:34