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

如何从TNetHTTPClient组件中获取HTTP请求头信息

如何从TNetHTTPClient中获取请求头

你可以通过两种方式获取TNetHTTPClient的请求头,分别对应请求发送前查看自定义头、请求发送时捕获最终实际发送的全量请求头两个场景:

场景1:请求发送前查看/管理自定义请求头

TNetHTTPClient本身自带Headers属性,你可以在发起请求前直接读取、修改这个属性里的内容,这部分就是你主动配置的请求头:

var
  netC: TNetHTTPClient;
  i: Integer;
begin
  netC := TNetHTTPClient.Create(nil);
  try
    // 支持先自定义请求头
    netC.CustomHeaders['User-Agent'] := 'MyTestClient/1.0';
    netC.CustomHeaders['Accept'] := 'text/html';
    
    // 直接读取已配置的请求头
    for i := 0 to netC.Headers.Count - 1 do
    begin
      Writeln(Format('%s: %s', [netC.Headers.Names[i], netC.Headers.ValueFromIndex[i]]));
    end;
    
    // 后续发起请求逻辑...
  finally
    netC.Free;
  end;
end;

场景2:捕获请求实际发送时的完整请求头

如果要拿到框架自动补全(比如自动添加的Host、Connection这类系统生成头)后的最终发送的全量请求头,可以通过OnSendingRequest事件捕获:

// 先定义请求发送前的事件处理方法
procedure TForm1.NetHTTPClientSendingRequest(Sender: TObject; AHTTPRequest: IHTTPRequest);
var
  i: Integer;
begin
  // AHTTPRequest.Header 即为最终要发送的完整请求头
  for i := 0 to AHTTPRequest.Header.Count - 1 do
  begin
    Writeln(Format('实际发送请求头: %s: %s', [AHTTPRequest.Header.Names[i], AHTTPRequest.Header.ValueFromIndex[i]]));
  end;
end;

// 主请求逻辑绑定事件即可
var
  netC: TNetHTTPClient;
  strim: TStringStream;
  aResponse: IHTTPResponse;
begin
  netC := TNetHTTPClient.Create(nil);
  try
    netC.OnSendingRequest := NetHTTPClientSendingRequest;
    strim := TStringStream.Create;
    try
      aResponse := netC.Get('https://google.com', strim);
    finally
      strim.Free;
    end;
  finally
    netC.Free;
  end;
end;

如果你实际需要的是服务器返回的响应头,直接从返回的IHTTPResponse对象读取即可:

for i := 0 to aResponse.Header.Count - 1 do
begin
  Writeln(Format('响应头: %s: %s', [aResponse.Header.Names[i], aResponse.Header.ValueFromIndex[i]]));
end;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:09:03