Python requests库从文件读取请求头发送POST请求报错如何解决
问题原因
报错的核心原因是requests.post的headers参数要求传入字典类型,但你实际传入的是从文件直接读取的字符串headers_file,requests内部尝试调用headers的items()方法遍历键值对时,字符串没有该方法就触发了AttributeError。
你已经写好了将字符串格式请求头转为字典的工具函数get_headers_as_dict,但只调用了它打印结果,没有把转换后的字典赋值给变量用来发请求。
修复方法
修改发请求前的代码即可:
with open('headers.txt') as f: headers_file = f.read() # 新增:把字符串格式的头转为字典 headers_from_file = get_headers_as_dict(headers_file) print(headers_from_file) print(headers_dict) proxies = {"http": "http://127.0.0.1:8080", "https": "http://127.0.0.1:8080"} # 修改:headers参数传入转换后的字典,你也可以替换成自己预定义的headers_dict r = requests.post(url, json=data, headers=headers_from_file, proxies=proxies)
额外注意事项
- 如果你转换后的头字典和预定义的
headers_dict有重复字段需要合并,可以用headers = {**headers_dict, **headers_from_file}的方式合并,后传入的字典会覆盖同key的旧值 - 注意
headers.txt里的换行符要是标准的\n,如果是Windows导出的带\r的换行符,可以把split("\n")改成splitlines()适配不同操作系统的换行格式
内容的提问来源于stack exchange,提问作者AbelJM
相关产品推荐
相关产品推荐

