配置含mid的Cookies请求Instagram返回空CookieJar,mid是否被加密?
问题分析与解决
首先明确:mid字段没有被加密,导致你看不到响应Cookie的原因主要有以下几点:
1. Instagram的Cookie下发逻辑
mid是Instagram的会话标识Cookie,属于持久Cookie。服务端只会在检测到客户端未携带该Cookie时,才会通过Set-Cookie头下发它。你已经在请求中主动携带了mid,服务端判断你已持有有效标识,因此不会在响应中重复返回。
2. Requests库的CookieJar行为
response.cookies仅收集服务端本次响应通过Set-Cookie头发送的Cookie,不会包含你发送给服务端的Cookie。你携带的mid存在于请求的Cookie中,可以通过response.request.cookies查看,而不是响应的CookieJar里。
3. 反爬机制导致无Cookie返回
Instagram有严格的反爬策略,如果你的请求头、Cookie组合不符合浏览器的真实请求特征,服务端可能会拒绝返回任何Cookie(甚至返回4xx/5xx状态码),最终导致response.cookies为空。比如你的请求头中sec-ch-ua和user-agent版本不匹配(Chrome 107对应Edg 106),这种不一致可能触发反爬检测。
解决方法
方法1:查看自己发送的mid
如果你只是确认mid是否被正确发送,直接检查请求的Cookie:
print(response.request.cookies.get('mid'))
方法2:让服务端重新下发mid
清空请求中的mid字段,让服务端认为你是新会话,此时响应会包含mid:
cookies = { 'csrftoken': 'zqTulCRLP4j19qZjlz5wxlaPMqgBtAg1', 'ig_did': '28DDE3CE-4A94-40B5-8E79-F8A723675F1E', 'ig_nrcb': '1', 'dpr': '2.625' } # 发送请求后查看响应Cookie response = get('https://www.instagram.com/', cookies=cookies, headers=headers) print(response.cookies.get('mid'))
方法3:完善请求特征
- 确保
user-agent和sec-ch-ua等头信息完全匹配浏览器的真实请求(可以从浏览器开发者工具中复制)。 - 如果是登录状态,补充
sessionid等必要的登录Cookie。 - 避免使用
cache-control: no-cache这类可能暴露脚本请求的头,尽量模拟浏览器的默认请求头。
内容的提问来源于stack exchange,提问作者Wfm171OJ Hdf6syrB
相关产品推荐
相关产品推荐

