PY4E课程Socket GET脚本Windows下返回乱码及拦截页面问题求助
问题诊断与解决方案
核心原因
这和编码无关,是Avira杀毒软件的网络拦截功能在Windows环境下阻断了脚本对data.pr4e.org的HTTP请求,返回了Avira自身的拦截提示页面(而非目标文件),所以你看到乱码(拦截页面的内容/编码和预期不符)。WSL是独立于Windows的子系统,Avira默认不会拦截WSL内的网络请求,因此能正常获取文件。
解决步骤
1. 临时关闭Avira网络防护(用于验证)
打开Avira杀毒软件,找到「实时保护」或「网络防护」模块,临时关闭该功能,重新运行Python脚本,确认是否能正常获取romeo.txt内容。如果正常,即可确认是Avira拦截导致的问题。
2. 添加Avira白名单(永久解决)
在Avira的「设置」→「排除项」中,添加以下内容:
- 你的Python解释器路径(比如
C:\Python39\python.exe,或VSCode中使用的Python路径) - 脚本所在的文件夹路径
- 目标域名
data.pr4e.org(部分Avira版本支持直接添加域名白名单)
3. 替代方案:改用标准HTTP客户端库
手动构建Socket请求容易被杀毒软件误判,改用更规范的HTTP库兼容性更好:
使用urllib(Python自带,无需额外安装)
import urllib.request with urllib.request.urlopen('http://data.pr4e.org/romeo.txt') as response: content = response.read().decode('utf-8') print(content)
使用requests(需先安装:pip install requests)
import requests resp = requests.get('http://data.pr4e.org/romeo.txt') print(resp.text)
额外验证
确认Windows防火墙没有拦截Python的网络请求:打开「Windows Defender防火墙」→「允许应用通过防火墙」,检查Python是否在允许列表中。
内容的提问来源于stack exchange,提问作者armando
相关产品推荐
相关产品推荐

