Delphi 如何使用IHTTPNegotiate添加额外的http头?
如何使用IHTTPNegotiate向请求添加额外的头?我添加了接口,但是函数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
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
的对象。