5

如何使用 IHTTPNegotiate 向请求中添加额外的标头?我添加了接口,但BeginningTransaction & 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;
4

1 回答 1

2

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

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

BeginTransaction您的方法IHttpNegotiate被调用时,在 Start 调用上获取一个IHttpNegotiate实例ProtSink,调用BeginTransaction并添加您的标头,然后再将它们传递给调用者。

于 2013-10-09T17:54:46.123 回答