Delphi DataSnap-更改';用户代理';客户端连接中的HTTP头属性
我有一个Delphi XE2 Win32应用程序,它使用DataSnap HTTP连接到REST服务。HTTP连接使用默认的“用户代理”头“Mozilla/3.0(兼容;Indy Library)”。我想将其更改为更特定于我的应用程序的内容,以便我可以从不同的应用程序版本监控服务器上的连接。我正在使用TDSRESTConnection建立连接-有人能告诉我设置“用户代理”需要使用的对象/属性吗?我尝试使用以下方法:Delphi DataSnap-更改';用户代理';客户端连接中的HTTP头属性,delphi,http,delphi-xe2,user-agent,datasnap,Delphi,Http,Delphi Xe2,User Agent,Datasnap,我有一个Delphi XE2 Win32应用程序,它使用DataSnap HTTP连接到REST服务。HTTP连接使用默认的“用户代理”头“Mozilla/3.0(兼容;Indy Library)”。我想将其更改为更特定于我的应用程序的内容,以便我可以从不同的应用程序版本监控服务器上的连接。我正在使用TDSRESTConnection建立连接-有人能告诉我设置“用户代理”需要使用的对象/属性吗?我尝试使用以下方法: TDSRESTConnection.HTTP.Request.CustomHea
TDSRESTConnection.HTTP.Request.CustomHeaders.AddValue('User-Agent', 'MyText');
但这没有任何区别。不幸的是,您的自定义头在
tdsrestrest.GetHTTP
中被清除和忽略(并且tdsrestrest
隐藏在Datasnap.DSClientRest
单元的实现中)。
尝试以下解决方法:
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.
您好,非常感谢您的回复。请原谅,您是否可以确认您发布的代码将放置在Datasnap.DSClientRest单元中,或者可以将其作为新单元添加到我的项目中?您好,抱歉,我不够清楚。将代码放在您自己的任何单元中。我编写此代码是为了避免修改原始Datasnap源代码。否则,您可以简单地在
TDSRestRequest.GetHTTP
中修复它。太棒了,我不太明白它是如何工作的,但它是如何工作的!非常感谢。