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

时间:2013-10-09 17:12:01

标签: delphi webbrowser-control delphi-xe4 twebbrowser urlmon

如何使用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;

1 个答案:

答案 0 :(得分:2)

我默默地假设您通过实施IInternetProcol IInternetProtocolSinkIInternetBindInfo接口来拦截流量,并调用原始{{1完成工作。在这种情况下,了解谁给谁打电话的方向很重要。

如果原始处理程序需要其他标头,则会先将IInternetProtocol投射到IInternetProtocolSink界面(IServiceProvider),然后为{{QueryInterface调用QueryService 1}}实例。通过方便,您可以添加当前对象实例并在同一对象上实现IHttpNegotiate,但这不是必需的。

当您IHttpNegotiate的{​​{1}}方法被调用时,在“开始”通话的BeginTransaction上获取IHttpNegotiate个实例,请致电IHttpNegotiate并添加您的在将它们传递给调用者之前的标题。