如何使用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;
答案 0 :(得分:2)
我默默地假设您通过实施IInternetProcol
和 IInternetProtocolSink
和IInternetBindInfo
接口来拦截流量,并调用原始{{1完成工作。在这种情况下,了解谁给谁打电话的方向很重要。
如果原始处理程序需要其他标头,则会先将IInternetProtocol
投射到IInternetProtocolSink
界面(IServiceProvider
),然后为{{QueryInterface
调用QueryService
1}}实例。通过方便,您可以添加当前对象实例并在同一对象上实现IHttpNegotiate
,但这不是必需的。
当您IHttpNegotiate
的{{1}}方法被调用时,在“开始”通话的BeginTransaction
上获取IHttpNegotiate
个实例,请致电IHttpNegotiate
并添加您的在将它们传递给调用者之前的标题。