You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用requests.get获取ngrok返回的原始内容为何不可读?

解决Python 3.6中requests GET响应原始内容读取问题

嘿,我之前也碰到过类似的乱码问题,咱们一步步拆解排查~

先搞清楚核心问题:响应编码与内容类型不匹配

你提到POST请求源是application/json且编码为utf-8,但你当前处理的是GET响应,服务器返回的响应头、编码可能和你预期的不一样,这往往是乱码的根源。

第一步:先确认响应的真实状态

先别着急解析,先把响应的头信息和当前编码打出来,看看服务器实际返回了什么:

import requests

# 替换成你的ngrok转发URL
response = requests.get("https://xxxxx.ngrok.io")
# 打印响应头,重点看Content-Type字段
print("响应头信息:", response.headers)
# 打印requests自动识别的编码
print("当前识别的编码:", response.encoding)

很多时候服务器没在响应头里正确设置charset=utf-8,导致requests默认用了ISO-8859-1这类编码去解析,自然会出现乱码。

第二步:强制指定编码解析

如果响应头里的编码不对,或者压根没指定,直接手动设置编码为utf-8再读取:

response.encoding = 'utf-8'
readable_content = response.text
print("解析后的内容:", readable_content)

要是还是乱码,可能是服务器返回了压缩内容(比如gzip),试试关闭自动解压后再处理:

# 告诉服务器不要返回压缩内容
headers = {'Accept-Encoding': 'identity'}
response = requests.get("你的ngrok URL", headers=headers)
response.encoding = 'utf-8'
print(response.text)

第三步:直接处理原始二进制内容

如果上面的方法都不行,那就直接读取原始二进制数据,手动解码:

raw_bin = response.content
# 用utf-8解码,要是报错可以试试gbk/utf-16等常见编码
try:
    decoded_content = raw_bin.decode('utf-8')
    print(decoded_content)
except UnicodeDecodeError:
    # 试试自动检测编码(需要先安装chardet:pip install chardet)
    import chardet
    detect_result = chardet.detect(raw_bin)
    print(f"自动检测到编码:{detect_result['encoding']}")
    decoded_content = raw_bin.decode(detect_result['encoding'])
    print(decoded_content)

第四步:排除ngrok的转发影响

有时候ngrok在转发过程中会修改响应头或编码,你可以用curl命令直接测试,对比和Python里拿到的结果是否一致:

curl -v "你的ngrok转发URL"

如果curl返回的内容是正常的,那问题大概率出在Python代码的处理逻辑上;如果curl也乱码,那可能是源服务器的响应本身有问题。

另外,你提到之前用urllib试过,要是能把那段代码贴出来,说不定能更快找到细节问题~


内容的提问来源于stack exchange,提问作者IDontKnowCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:59:23