Python:如何用Requests下载EXE到内存并导入pefile.PE?
解决requests下载EXE并导入pefile.PE的错误问题
错误原因
你遇到的TypeError是因为open()函数仅支持传入文件路径、字节路径或文件描述符,无法直接处理io.BytesIO对象——而BytesIO本身就是可直接读取的类文件对象,不需要再用open()包裹。
正确代码示例
import requests import pefile import io # 下载目标EXE文件 responseEXE = requests.get('PATH_TO_EXE') # 确保请求成功,避免下载失败后续代码报错 responseEXE.raise_for_status() # 直接用BytesIO包装二进制内容,创建PE对象 pe_payload = pefile.PE(data=io.BytesIO(responseEXE.content)) # 获取原始二进制数据的两种方式: # 方式1:直接使用response的content属性(最简便) payload_data = responseEXE.content # 方式2:通过BytesIO读取(适合需要多次操作二进制流的场景) byte_stream = io.BytesIO(responseEXE.content) payload_data = byte_stream.read()
关键说明
pefile.PE()的data参数支持直接传入类文件对象(如BytesIO),无需额外转换- 无需对
BytesIO对象调用open(),它本身已经实现了文件对象的读写接口 - 添加
response.raise_for_status()可以在请求返回错误状态码时立即抛出异常,便于排查下载问题
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

