如何从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
相关产品推荐
相关产品推荐

