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

使用HTTParty获取/设置会话:部分页面报404需会话头问题

嘿,我之前也遇到过Instagram这种“部分页面能访问、部分返回404”的情况,大概率是它的反爬机制在搞鬼——有些页面会校验会话相关的请求头,哪怕看起来是公开内容。咱们来一步步搞定:

解决Instagram地点页面404的会话头处理方案

1. 先抓出浏览器正常访问时的关键请求头

首先你得从浏览器里拿到能正常打开那个404页面的请求头,步骤很简单:

  • 打开Chrome/Firefox的开发者工具(按F12就行)
  • 手动访问那个返回404的地点页面https://www.instagram.com/explore/locations/295648950/trio-salon-spa/
  • 切换到「Network」标签,找到第一个GET请求(就是这个页面的请求)
  • 复制「Request Headers」里的内容,重点盯这几个字段:Cookie、User-Agent、Referer

2. 用HTTParty带上这些请求头发起请求

把刚才复制的请求头整理成Ruby哈希,传给HTTParty的:headers参数就行。示例代码如下:

# 替换成你从浏览器复制的真实请求头内容
custom_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',
  'Cookie' => 'ds_user_id=xxx; sessionid=xxx; ig_did=xxx; ...', # 这里放完整的Cookie字符串
  'Referer' => 'https://www.instagram.com/explore/locations/'
}

# 发起请求
response = HTTParty.get(
  'https://www.instagram.com/explore/locations/295648950/trio-salon-spa/',
  headers: custom_headers
)

puts response.code # 正常的话会返回200

3. 为啥有些页面不需要这些头?

那些能直接访问的页面,要么是Instagram对这类公开热门地点放宽了校验,要么是你之前的请求无意中带上了一些默认的会话痕迹(比如HTTParty的缓存?不过概率不大)。但像小众商家、有隐私设置的地点页面,Instagram会强制校验会话有效性,所以必须带上正确的请求头。

4. 踩坑提醒

  • Cookie会过期:过几天如果又返回404,记得重新从浏览器复制最新的Cookie
  • 别频繁请求:Instagram的反爬很严,频繁请求会被封IP,建议加个请求间隔(比如sleep 2)
  • 别用默认User-Agent:HTTParty的默认User-Agent太容易被识别,一定要用真实浏览器的UA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:49:55