Delphi 如何使用IHTTPNegotiate添加额外的http头?

Delphi 如何使用IHTTPNegotiate添加额外的http头?,delphi,webbrowser-control,delphi-xe4,twebbrowser,urlmon,Delphi,Webbrowser Control,Delphi Xe4,Twebbrowser,Urlmon,如何使用IHTTPNegotiate向请求添加额外的头?我添加了接口,但是函数beginingtransaction&OnResponse从未被调用 TNameSpaceHandler = class(TComObject, IInternetProtocol, IHttpNegotiate) ... function BeginningTransaction(szURL, szHeaders: LPCWSTR; dwReserved: DWORD; out szAd

如何使用IHTTPNegotiate向请求添加额外的头?我添加了接口,但是函数
beginingtransaction&OnResponse
从未被调用

TNameSpaceHandler = class(TComObject, IInternetProtocol, IHttpNegotiate)  
...
    function BeginningTransaction(szURL, szHeaders: LPCWSTR; dwReserved: DWORD;
        out szAdditionalHeaders: LPWSTR): HResult; stdcall;
    function OnResponse(dwResponseCode: DWORD; szResponseHeaders, szRequestHeaders: LPCWSTR;
        out szAdditionalRequestHeaders: LPWSTR): HResult; stdcall;
...
end;

我默默地假设您正在通过实现
IInternetProcol
IInternetProtocolSink
IInternetBindInfo
接口拦截流量,并调用原始的
IInternetProtocol
完成工作。在这种情况下,知道谁给谁打电话的方向很重要

如果原始处理程序需要额外的头,它将首先将您的
IInternetProtocolSink
强制转换到
IServiceProvider
接口(使用
QueryInterface
),并调用
QueryService
以获得
IHttpNegotiate
实例。为了方便起见,您可以添加当前对象实例,也可以在同一对象上实现
IHttpNegotiate
,但这不是必需的


调用
IHttpNegotiate
BeginTransaction
方法时,在Start调用的
ProtSink
上获取
IHttpNegotiate
实例,调用
BeginTransaction
并添加头在将它们传递给调用方之前。

我认为这不会向请求添加头。这只会获取请求头。但它不会添加额外的标题。请再次阅读最后一段。非常接近。我试过你说的,但不起作用。它需要一个实际的代码示例。顺便问一下,你以前测试过这个吗?您可以添加额外的头吗?只是为了确保我理解:您是想在浏览器中添加额外的头,还是想在发送到Web服务器的请求中添加额外的头?您可以显示更多的代码吗?如果要为URL命名空间实现一个,那么应该有一个单独的对象实现
IInternetProtocolSink
,以传递给上游协议处理程序。这也是应该实现
IServiceProvider
IHttpNegotiate
的对象。