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

如何通过Clever Internet Suite获取响应正文

问题根因

乱码及无法正确提取响应正文是编码不匹配、组件默认响应解析逻辑干扰两个原因导致的,Fiddler可抓到完整内容说明请求链路正常,问题出在本地流解析环节。

解决步骤

  • 第一步:调整clHttp组件基础配置,禁用默认的自动解析逻辑
    配置以下两个属性,避免组件提前篡改响应流内容:
    // 禁用组件默认的响应解析逻辑,避免自动转码错误
    clHttp.ParseResponse := False; 
    // 排查阶段先关闭gzip压缩,确认原始内容正常后再按需开启解压逻辑
    clHttp.AllowGzipEncoding := False; 
    
  • 第二步:替换TStringStream为TMemoryStream,手动按响应编码转换字符串
    TStringStream的DataString属性默认使用当前系统ANSI编码转换字节,与服务端返回的UTF-8/GB2312等编码不匹配是乱码的核心原因,修改代码如下:
    procedure ...
    var 
      ResponseStream: TMemoryStream;
      ResponseBytes: TBytes;
      Charset, ResponseStr: string;
    begin
      ResponseStream := TMemoryStream.Create;
      try
        clHttp.Post(aUrl, clHttpRequest, ResponseStream);
        // 从响应头读取服务端指定的编码格式
        Charset := clHttp.Response.Header.ContentType.Charset;
        // 若响应头未返回编码,可根据目标站点特性手动指定,常用值为'UTF-8'或'GB2312'
        if Charset = '' then Charset := 'UTF-8';
        
        // 读取完整响应字节并按指定编码转字符串
        SetLength(ResponseBytes, ResponseStream.Size);
        ResponseStream.Position := 0;
        ResponseStream.ReadBuffer(ResponseBytes[0], ResponseStream.Size);
        ResponseStr := TEncoding.GetEncoding(Charset).GetString(ResponseBytes);
        
        Memo.Lines.Add(ResponseStr);
      finally
        ResponseStream.Free;
      end;
    end;
    
  • 第三步:gzip压缩场景额外处理
    如需开启gzip压缩提升传输效率,开启clHttp.AllowGzipEncoding := True后,需先判断clHttp.Response.Header.ContentEncoding为gzip时,先用clGzip组件解压响应字节流,再执行编码转换。

内容的提问来源于stack exchange,提问作者RAT-Daddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:48:01