PHP实现Instagram个人主页抓取脚本服务器端跳转登录页问题
问题原因
你部署到服务器的脚本被Instagram重定向到登录页,是因为Instagram反爬机制识别到了非法请求:
- 你的服务器IP属于机房IP,本身就被Instagram标记为高风险爬虫来源,而你本地IP是民用宽带IP,之前未被标记,所以本地能正常请求
- 你原有代码的curl请求没有携带任何合法请求头、登录态Cookie,反爬直接判定为爬虫,强制重定向到登录页
- 目前Instagram的
__a=1公开接口早就要求登录态才能返回数据,你本地之前运行时大概率浏览器登录过Instagram,本地请求上下文有有效Cookie,所以能正常返回
修复步骤
- 先在浏览器手动登录Instagram账号,登录成功后按F12打开开发者工具,在「网络」面板任意找一个Instagram的请求,复制请求头中的
sessionid值,该值有效期一般为1~2周,过期后需要重新获取 - 替换原有代码中的curl请求部分,新增必要的请求头和登录态配置,修改后代码如下:
<?php if(isset($_POST['username'])){ $username = $_POST['username']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"https://www.instagram.com/$username/?__a=1"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT,10); // 禁止自动跟随重定向到登录页 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // 配置请求头,替换成你自己的UA和sessionid $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', 'Accept: */*', 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8', 'Cookie: sessionid=替换为你自己的sessionid值;', 'X-IG-App-ID: 936619743392459' ]; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); // 先判断请求状态 if($httpCode !== 200) { $insta_profile_picture = ''; } else { $json = json_decode($result); $insta_profile_picture = $json->graphql->user->profile_pic_url_hd ?? ''; } } ?>
- 额外注意事项:
- 不要高频发起请求,否则你的账号、服务器IP都会被Instagram限流封禁
- 如果服务器IP已经被限流,可以更换民用代理IP发起请求
- 如果需要长期稳定使用,建议申请Instagram官方开发者权限,调用官方公开接口,避免频繁适配反爬规则
内容的提问来源于stack exchange,提问作者awrefjm
相关产品推荐
相关产品推荐

