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

5
我该如何使用IHTTPNegotiate添加额外的请求头?我添加了接口,但BeginningTransactionOnResponse函数从未被调用。
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;

你能展示更多的代码吗?如果你正在为你的URL命名空间实现一个穿透式可插拔协议处理程序,那么应该有一个单独的对象实现IInternetProtocolSink来传递给上游协议处理程序。这个对象也应该实现IServiceProviderIHttpNegotiate - noseratio - open to work
1个回答

2
我假定你正在拦截流量,同时实现了IInternetProcolIInternetProtocolSinkIInternetBindInfo接口,并调用原始的IInternetProtocol来完成工作。在这种情况下,重要的是要知道是谁在调用谁。
如果原始处理程序想要额外的标头,它将首先将您的IInternetProtocolSink转换为IServiceProvider接口(使用QueryInterface),并为IHttpNegotiate实例调用QueryService。为方便起见,您可以添加当前对象实例,并在同一对象上实现IHttpNegotiate,但这不是必需的。
当调用您的IHttpNegotiateBeginTransaction方法时,获取Start调用的ProtSink上的IHttpNegotiate实例,调用BeginTransaction并在将其传递给调用者之前添加您的标头。

我认为这不会向请求添加头信息。 - user1647411
这将仅获取请求头。但它不会添加额外的头信息。 - user1647411
我已经尝试了你说的方法,但是它不起作用。它需要一个实际的代码示例。顺便问一下,你之前测试过这个吗?你能添加额外的头部吗? - user1647411
只是为了确保我理解正确:您想要一个额外的标题到达浏览器,还是想要在发送到Web服务器的出站请求中添加一个额外的标题? - Stijn Sanders
在发送HTTP请求到Web服务器之前,确实会有一个额外的标头。这就是IHttpNegotiate::BeginningTransaction所做的事情。 - user1647411
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接