2013-10-09 7 views
4

IHTTPNegotiate를 사용하여 요청에 추가 헤더를 어떻게 추가 할 수 있습니까? 나는 인터페이스를 추가했지만 함수는 BeginningTransaction & OnResponse 호출되지 않습니다.IHTTPNegotiate를 사용하여 추가 HTTP 헤더를 어떻게 추가 할 수 있습니까?

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

더 많은 코드를 표시 할 수 있습니까? URL 네임 스페이스에 대해 [pass-through pluggable protocol handler] (http://stackoverflow.com/a/3711662/1768303)를 구현하는 경우에는 'IInternetProtocolSink'를 구현하는 별도의 객체가 있어야합니다. -stream 프로토콜 핸들러. 그것도'IServiceProvider'와'IHttpNegotiate'를 구현해야하는 객체입니다. – Noseratio

답변

2

나는 조용히 당신이 모두 구현 IInternetProcolIInternetProtocolSinkIInternetBindInfo 인터페이스에서 트래픽을 차단하고 가정 및 작업 수행이 원래 IInternetProtocol를 호출하고 있습니다. 이 경우 누가 누가 전화하는지의 방향을 아는 것이 중요합니다. 원래 핸들러가 추가 헤더를 원하는 경우

는, 먼저 ( QueryInterface 포함) IServiceProvider 인터페이스로 IInternetProtocolSink 캐스트 및 IHttpNegotiate 예를 들어 QueryService를 호출합니다. 편의상 현재 객체 인스턴스를 추가하고 IHttpNegotiate을 동일한 객체에 구현할 수 있지만 필수는 아닙니다. 당신의 IHttpNegotiateBeginTransaction 메소드가 호출되는

시작 호출의 ProtSinkIHttpNegotiate 인스턴스를 가져, BeginTransaction를 호출하고 발신자에게 전달하기 전에 헤더 (들)를 추가합니다.

+0

요청에 헤더를 추가하지 않을 것이라고 생각합니다. –

+1

답변을 업데이트했습니다. –

+0

요청 헤더 만받습니다. 그러나 추가 헤더를 추가하지는 않습니다. –