Python Requests从TXT文件加载Cookies报错,求排查原因
你尝试从TXT文件加载Cookie内容,而非直接在变量中声明,但运行报错TypeError: string indices must be integers。相关信息如下:
cookies.txt内容:
{"PHPSESSID": "ibd1biktq4tfm3k4j790juf19d", "security": "impossible"}
你的Python脚本:
file = open("cookies.txt", "r") file = file.readlines() str1 = " " cookies = str1.join(file) # 用于将列表转为字符串 requests.get("http://localhost/dvwa", cookies=cookies)
执行print(cookies)输出的内容看起来和直接赋值的字典一致,但直接赋值能正常运行,读文件就报错。
错误原因
requests.get()的cookies参数要求传入Python字典类型,但你从文件读取并拼接后得到的是字符串类型——哪怕这个字符串格式和字典完全一样,它本质还是字符串,无法被requests识别为Cookie字典,因此抛出类型错误。
而直接把{"PHPSESSID": "...", "security": "..."}赋值给变量时,Python会自动将其解析为字典类型,所以能正常运行。
解决方法
使用Python内置的json模块,将读取到的字符串解析为字典:
修正后的代码:
import json import requests # 读取文件内容(用with语句自动管理文件资源) with open("cookies.txt", "r") as f: cookies_str = f.read().strip() # 读取全部内容并去除首尾空白(如换行符、空格) # 将JSON格式的字符串转为Python字典 cookies = json.loads(cookies_str) # 发起请求 requests.get("http://localhost/dvwa", cookies=cookies)
补充说明:
with语句是Python中处理文件的规范写法,能自动关闭文件,避免资源泄漏strip()方法可去除字符串首尾的换行符、空格等无关字符,防止因多余字符导致JSON解析失败json.loads()专门用于将JSON格式的字符串转换为Python字典,是处理这类场景的标准方式
内容的提问来源于stack exchange,提问作者eternalodballl
相关产品推荐
相关产品推荐

