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

