如何正确将Python requests的Cookies转为JSON格式存储到本地文件
问题原因
- 请求对象使用错误:调用
requests.get()发起请求时,本次请求返回的cookies存储在响应对象r中,你代码中取session.cookies属于调用无关对象,会导致拿到的cookies不符合预期 - 本地存储的cookies为字符串类型:你当前
data.txt中127:000对应的值是JSON字符串,不是字典结构,requests的cookies参数只接受字典或CookieJar对象,传入字符串直接触发类型错误 - JSON双转义问题:之前的写入操作错误地将cookies字典先转为JSON字符串再存入外层字典,最终dump后就出现了带转义符的字符串存储结果
修复现有损坏的存储文件
如果你的data.txt已经存储了字符串格式的cookies,先运行一次以下代码完成格式修复:
import json with open('data.txt', 'r', encoding='utf-8') as f: proxy_data = json.load(f) # 将字符串格式的cookies转为字典 if isinstance(proxy_data['127:000'], str): proxy_data['127:000'] = json.loads(proxy_data['127:000']) # 重新写入正确格式的内容 with open('data.txt', 'w', encoding='utf-8') as f: json.dump(proxy_data, f, ensure_ascii=False, indent=2)
场景1:普通单次请求
import json import requests # 读取本地存储的cookie数据 with open('data.txt', 'r', encoding='utf-8') as f: proxy_data = json.load(f) # 填写你自己的请求配置 URL = "目标请求地址" proxies = { # 你的代理配置 } # 发起请求,传入字典格式的cookies r = requests.get( URL, proxies=proxies, cookies=proxy_data['127:000'] ) # 从响应对象中提取最新cookies,转为字典更新到数据中 proxy_data['127:000'] = dict(r.cookies) # 写入到本地文件 with open('data.txt', 'w', encoding='utf-8') as json_file: json.dump(proxy_data, json_file, ensure_ascii=False, indent=2)
场景2:使用Session维持会话
import json import requests # 初始化会话对象 session = requests.Session() # 读取本地存储的cookie数据 with open('data.txt', 'r', encoding='utf-8') as f: proxy_data = json.load(f) # 给会话设置cookies session.cookies.update(proxy_data['127:000']) # 填写你自己的请求配置 URL = "目标请求地址" proxies = { # 你的代理配置 } # 用会话发起请求 r = session.get(URL, proxies=proxies) # 从会话中提取最新cookies,转为字典更新到数据中 proxy_data['127:000'] = dict(session.cookies) # 写入到本地文件 with open('data.txt', 'w', encoding='utf-8') as json_file: json.dump(proxy_data, json_file, ensure_ascii=False, indent=2)
内容的提问来源于stack exchange,提问作者PhpCoder223
相关产品推荐
相关产品推荐

