2012-06-14 61 views
0

我有一個使用DataSnap HTTP連接到REST服務的Delphi XE2 Win32應用程序。 HTTP連接使用'Mozilla/3.0(compatible; Indy Library)'的默認'User-Agent'標頭。我想將其更改爲更具體的應用程序,以便我可以監視來自不同應用程序版本的服務器上的連接。我使用TDSRESTConnection進行連接 - 任何人都可以指向我需要使用的對象/屬性來設置'User-Agent'?我試過使用以下內容:Delphi DataSnap - 在客戶端連接中更改'User-Agent'HTTP頭部屬性

TDSRESTConnection.HTTP.Request.CustomHeaders.AddValue('User-Agent', 'MyText'); 

但是這沒有什麼區別。

回答

1

不幸的是,您的自定義頭文件被清除並在TDSRestRequest.GetHTTP中被忽略(並且在執行Datasnap.DSClientRest單元中隱藏TDSRestRequest)。 嘗試此變通辦法:

uses 
    Datasnap.DSHTTP, IdHTTPHeaderInfo; 

const 
    SUserAgent = 'MyUserAgent'; 

type 
    TDSHTTPEx = class(TDSHTTP) 
    constructor Create(AOwner: TComponent; const AIPImplementationID: string); override; 
    end; 

    TDSHTTPSEx = class(TDSHTTPS) 
    constructor Create(const AIPImplementationID: string); override; 
    end; 

{ TDSHTTPEx } 

constructor TDSHTTPEx.Create(AOwner: TComponent; const AIPImplementationID: string); 
begin 
    inherited Create(AOwner, AIPImplementationID); 
    with Request.GetObject as TIdRequestHeaderInfo do 
    UserAgent := SUserAgent; 
end; 

{ TDSHTTPSEx } 

constructor TDSHTTPSEx.Create(const AIPImplementationID: string); 
begin 
    inherited Create(AIPImplementationID); 
    with Request.GetObject as TIdRequestHeaderInfo do 
    UserAgent := SUserAgent; 
end; 

initialization 
    TDSHTTP.UnregisterProtocol('http'); 
    TDSHTTP.RegisterProtocol('http', TDSHTTPEx); 
    TDSHTTP.UnregisterProtocol('https'); 
    TDSHTTPS.RegisterProtocol('https', TDSHTTPSEx); 

finalization 
    TDSHTTP.UnregisterProtocol('http'); 
    TDSHTTP.UnregisterProtocol('https'); 

end. 
+0

嗨,非常感謝您的答覆。請原諒我,但您能否確認您發佈的代碼是放置在Datasnap.DSClientRest單元中,還是隻能作爲我的項目中的新單元添加? –

+0

嗨,對不起,我還不夠清楚。把代碼放在你自己的任何單元中。我專門編寫了這些代碼,以避免修改原始Datasnap源代碼。否則,你可以簡單地將它修復在'TDSRestRequest.GetHTTP'中。 –

+0

奇妙的是,我不明白它是如何工作的,但它的工作原理!非常感謝。 –