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

Flutter使用instagram_public_api返回HTML而非JSON的问题解决

解决Instagram公开账号详情请求返回HTML而非JSON的问题

问题原因

instagram_public_api: ^0.2.3版本过旧,Instagram的公开数据接口或反爬机制已更新,旧库的请求逻辑无法正确获取JSON数据,被返回HTML(如验证页、登录引导页)。

解决方法

1. 升级依赖包到最新版

执行命令升级库:

flutter pub upgrade instagram_public_api

或手动修改pubspec.yaml中的版本号为pub.dev上的最新版本,再执行flutter pub get。
升级后重新测试请求,若库已适配新接口则问题解决。

2. 更换维护活跃的替代库

若升级后仍无效,说明原库已停止维护,可替换为近期更新的第三方库(如instagram_scraper_flutter),这类库会及时跟进Instagram的接口变化。

3. 手动实现请求逻辑(自定义方案)

直接请求Instagram公开用户页面,通过设置浏览器模拟请求头绕过反爬,示例代码如下:

import 'package:http/http.dart' as http;
import 'dart:convert';

Future<void> fetchInstaProfile(String username) async {
  final uri = Uri.parse('https://www.instagram.com/$username/?__a=1');
  // 模拟浏览器请求头,避免被识别为非浏览器请求
  final headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
  };

  final response = await http.get(uri, headers: headers);
  if (response.statusCode == 200) {
    final jsonData = json.decode(response.body);
    final userData = jsonData['graphql']['user'];
    print('用户名:${userData['username']}');
    print('头像链接:${userData['profile_pic_url_hd']}');
    print('简介:${userData['biography']}');
  } else {
    print('请求失败,状态码:${response.statusCode}');
  }
}

你可以将原代码中的insta.getProfileData替换为这个自定义方法。

注意事项

Instagram的公开非官方接口随时可能变更,这种爬取方式稳定性有限。如果是合规应用,建议使用官方Instagram Graph API(需申请开发者账号),这是长期稳定的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:07:15