Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 在运行时设置SMS web服务传递的主机和端口时出现TIDWTTP错误_Web Services_Delphi_Http_Indy_Delphi Xe3 - Fatal编程技术网

Web services 在运行时设置SMS web服务传递的主机和端口时出现TIDWTTP错误

Web services 在运行时设置SMS web服务传递的主机和端口时出现TIDWTTP错误,web-services,delphi,http,indy,delphi-xe3,Web Services,Delphi,Http,Indy,Delphi Xe3,我正在尝试使用来自的SMS API for Delphi,但在创建Indy的TIdHTTP实例后,当组件尝试设置Web服务的主机和端口时,我收到了一个“访问冲突”错误 host := TidHTTP.Create; host.Socket.Port := 80; // error right here! host.Socket.Host := 'system.human.com.br'; uri := TidURI.Create(); 原始组件是在Indy60中创建的,我有Indy170,因

我正在尝试使用来自的SMS API for Delphi,但在创建Indy的
TIdHTTP
实例后,当组件尝试设置Web服务的主机和端口时,我收到了一个“访问冲突”错误

host := TidHTTP.Create; 
host.Socket.Port := 80; // error right here!
host.Socket.Host := 'system.human.com.br';
uri := TidURI.Create();
原始组件是在Indy60中创建的,我有Indy170,因此在
主机
端口
之间没有
套接字
,我不得不将其放入

怎么了?我试图把组件直接放在表单上,在按钮代码中我做了套接字设置,我也得到了同样的错误


他们使用的发送方法如下:

 data := TIdMultiPartFormDataStream.Create;
 host.Request.ContentType := 'application/x-www-form-urlencoded';
 host.Post(strSMStext , data);

Socket
属性是一种特殊属性,当当前的
IOHandler
属性值指向
tidiahandlersocket
子代组件时,它可以更方便地访问特定于套接字的功能。否则为
nil
。您不应该直接设置
Socket.Host
Socket.Port
属性
TIdTCPClient.Connect()
在内部为您处理该问题。要设置主机/端口,您需要使用
TIdTCPClient.Host
TIdTCPClient.Port
属性。但是,
TIdHTTP
是该规则的一个例外,因为
TIdHTTP
根据传递给它的URL在内部为您设置主机/端口属性,例如:

host := TidHTTP.Create; 
host.Get('http://system.human.com.br/', ...); // <-- sets Host and Port for you!
发布
TIdMultipartFormDataStream
TStrings
时,让
TIdHTTP.Post()
决定使用哪个
内容类型
值,不要手动设置

查看您提供链接的库代码,需要进行以下更改:

  • TSMSSender
    构造函数中删除
    http.Port
    http.Host
    属性的分配

  • 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
    属性的赋值


  • 为什么要设置主机或端口?您可以在调用
    Get
    Post
    时指定地址。Assert(Assigned(Host.Socket))我没有执行该代码。如问题所述,它来自human.com.br。但是thay说他们不支持indy10或delphi-xe3。这个web服务需要登录和验证password@EASI:您显示的代码即使对于Indy的早期版本也是错误的。编写该代码的人显然不知道如何正确使用
    TIdHTTP
    data := TStringList.Create;
    data.Add('name=value');
    ...
    host.Post(strSMStext , data);
    
    //StrEnvio := '/GatewayIntegration/msgSms.do?dispatch=send' +
    StrEnvio := 'http://system.human.com.br/GatewayIntegration/msgSms.do?dispatch=send' +