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
相关产品推荐
相关产品推荐

