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

Python requests实现Instagram登录代码封装进函数/循环后报无效header错误求解

问题原因

报错核心是HTTP请求头名称包含非法前置制表符,根源是代码缩进导致的字符串解析异常:
你将代码封装进函数后,函数内部的缩进会被带入三引号包裹的headers_text多行字符串中,除第一行外的所有请求头行前面都多了制表符/空格前缀,直接按\n拆分字符串后没有清理这些前缀空白,就会出现\tUser-Agent这类非法头名称,触发校验错误。直接运行时没有函数层级的缩进,字符串拆分后的值符合规范,因此不会报错。

修复方案
  • 拆分headers_text的每一行时先调用strip()清除前后空白,同时过滤空行
  • 拆分头键值时限制拆分次数为1,避免头值中包含冒号时拆分错误
  • 建议将导入语句移到函数外部,避免重复导入损耗性能

修复后的完整代码如下:

import requests, json, urllib.parse

def tri():
    username = "usernam"
    password = "pass"
    r = requests.Session()
    hd={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0'}
    res = r.get('https://www.instagram.com/', headers=hd)
    payload = {'username':username,'enc_password':'#PWD_INSTAGRAM_BROWSER:0:1254625879:'+password,'queryParams':'{}','optIntoOneTap':'false'}
    headers_text = '''Host: www.instagram.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0
    Accept: */*
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate, br
    X-CSRFToken: %s
    X-IG-WWW-Claim: 0
    Content-Type: application/x-www-form-urlencoded
    X-Requested-With: XMLHttpRequest
    Content-Length: %s
    Origin: https://www.instagram.com
    Referer: https://www.instagram.com/
    Cookie: ig_did=%s; csrftoken=%s; mid=%s
    TE: Trailers'''%(res.cookies['csrftoken'],str(len(urllib.parse.urlencode(payload))),res.cookies['ig_did'],res.cookies['csrftoken'],res.cookies['mid'])
    # 新增行清理逻辑
    payload_headers = {}
    for line in headers_text.split('\n'):
        line = line.strip()
        if not line:
            continue
        key, value = line.split(': ', 1)
        payload_headers[key] = value
    resp = r.post("https://www.instagram.com/accounts/login/ajax/", headers=payload_headers,data=payload)
    if json.loads(resp.text)["authenticated"] == True:
        print('[+] Login successfully!')
        #print(resp.text)
    else:
        print(json.loads(resp.text))
        #print(word)

tri()

修改后代码封装进函数、加入循环都可以正常运行,无需额外适配Pydroid3环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:21:02