该属性是一个特殊属性,当当前属性值指向后代组件Socket
时,它可以更轻松地访问特定于套接字的功能。不然。您不应该直接设置and属性。 在内部为您处理。要设置主机/端口,您需要使用和属性。但是,该规则是一个例外,因为根据您传递给它的 URL 在内部为您设置主机/端口属性,例如:IOHandler
TIdIOHandlerSocket
nil
Socket.Host
Socket.Port
TIdTCPClient.Connect()
TIdTCPClient.Host
TIdTCPClient.Port
TIdHTTP
TIdHTTP
host := TidHTTP.Create;
host.Get('http://system.human.com.br/', ...); // <-- sets Host and Port for you!
host := TidHTTP.Create;
host.Post('http://system.human.com.br/', ...); // <-- sets Host and Port for you!
所以根本不要手动设置主机/端口属性。在每个具有TIdHTTP
组件的 Indy 版本中都是如此。
发布一个TIdMultiPartFormDataStream
对象会强制Content-Type
标题为multipart/form-data
. 你不能覆盖它。尝试使用发送 MIME 编码的数据application/x-www-form-urlencoded
是完全错误的。如果您真的想发送application/x-www-form-urlencoded
数据,则需要发布一个TStrings
对象,例如:
data := TStringList.Create;
data.Add('name=value');
...
host.Post(strSMStext , data);
发布 aTIdMultipartFormDataStream
或 aTStrings
时,让我们TIdHTTP.Post()
决定Content-Type
使用哪个值,不要手动设置。
查看您提供链接的库代码,需要进行以下更改:
从构造函数中移除http.Port
和http.Host
属性的赋值。TSMSSender
在 中TSMSSender.SimpleSend()
,将所需的主机添加到正在创建的 URL:
//StrEnvio := '/GatewayIntegration/msgSms.do?dispatch=send' +
StrEnvio := 'http://system.human.com.br/GatewayIntegration/msgSms.do?dispatch=send' +
在 中TSMSSender.MultipleSend()
,删除http.Request.ContentType
属性的赋值。