Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
HTTP向SMS发送文本服务在文本Delphi 2007中获得%20_Delphi_Http_Indy10 - Fatal编程技术网

HTTP向SMS发送文本服务在文本Delphi 2007中获得%20

HTTP向SMS发送文本服务在文本Delphi 2007中获得%20,delphi,http,indy10,Delphi,Http,Indy10,我正在使用Indy向一个短信服务发送帖子,该服务将发送短信,但短信文本在我的手机上以%20而不是空格结束,下面是代码: url,text:string; IdHTTP1: TIdHTTP; IdSSLIOHandlerSocketOpenSSL2: TIdSSLIOHandlerSocketOpenSSL; begin IdSSLIOHandlerSocketOpenSSL2 := TIdSSLIOHandlerSocketOpenSSL.Create; IdHTTP1

我正在使用Indy向一个短信服务发送帖子,该服务将发送短信,但短信文本在我的手机上以%20而不是空格结束,下面是代码:

url,text:string;
IdHTTP1: TIdHTTP;
IdSSLIOHandlerSocketOpenSSL2: TIdSSLIOHandlerSocketOpenSSL;
 begin    
    IdSSLIOHandlerSocketOpenSSL2 := TIdSSLIOHandlerSocketOpenSSL.Create;
    IdHTTP1 := TIdHTTP.Create;
    IdSSLIOHandlerSocketOpenSSL2.SSLOptions.Method := sslvSSLv23;
    IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL2;
    IdHTTP1.HandleRedirects := true;
    IdHTTP1.ReadTimeout := 5000;
    param:=TStringList.create;
    param.Clear;
    param.Add('action=create');
    param.Add('token=' + SMSToken);
    param.Add('to=' + Phone);
    param.Add('msg=' + MessageText);
    url:='https://api.tropo.com/1.0/sessions';
    try
       text:=IdHTTP1.Post(url, param);

谢谢

t字符串
版本的
TIdHTTP.Post()
向服务器发送
应用程序/x-www-form-urlencoded
请求。默认情况下,发布的数据是url编码的。服务器需要在处理发布的数据之前对其进行解码。听起来服务器端代码没有正确地执行此操作。您可以从
TIdHTTP.HTTPOptions
属性中删除
hoForceEncodeParams
标志,以禁用发布数据的url编码,但我建议您将错误报告给Tropo,以便他们可以修复其服务器端代码。

tString
版本的
TIdHTTP.Post()
向服务器发送
应用程序/x-www-form-urlencoded
请求。默认情况下,发布的数据是url编码的。服务器需要在处理发布的数据之前对其进行解码。听起来服务器端代码没有正确地执行此操作。您可以从
TIdHTTP.HTTPOptions
属性中删除
hoForceEncodeParams
标志,以禁用发布数据的url编码,但我建议您将错误报告给Tropo,以便他们可以修复其服务器端代码。

TIdHTTP本身不将引用的可打印编码应用于发布数据,因此,发布的数据必须事先引用可打印编码的数据

在Indy 10中,可以使用TIdFormDataField.Charset属性指定字符串如何转换为字节,然后使用TIdFormDataField.ContentTransfer属性指定字节的编码方式。对于ContentTransfer,您可以指定“7bit”、“8bit”、“binary”、“quoted printable”、“base64”或空白字符串(与“7bit”等效,但不在MIME头中说明那么多)

将TIdFormDataField.CharSet属性设置为与操作系统使用的内容匹配的字符集,然后将TIdFormDataField.ContentTransfer属性设置为“8bit”


或者,使用TStream重载版本的TIdMultipartFormDataStream.AddFormField()而不是字符串重载版本,然后您可以按照自己的意愿在输入TStream中存储数据,并根据TIdFormDataField.ContentTransfer属性的值对其进行编码。这将删除您获得的%20

TIdHTTP本身不将引用的可打印编码应用于已发布的数据,因此要发布的数据必须事先引用可打印编码

在Indy 10中,可以使用TIdFormDataField.Charset属性指定字符串如何转换为字节,然后使用TIdFormDataField.ContentTransfer属性指定字节的编码方式。对于ContentTransfer,您可以指定“7bit”、“8bit”、“binary”、“quoted printable”、“base64”或空白字符串(与“7bit”等效,但不在MIME头中说明那么多)

将TIdFormDataField.CharSet属性设置为与操作系统使用的内容匹配的字符集,然后将TIdFormDataField.ContentTransfer属性设置为“8bit”


或者,使用TStream重载版本的TIdMultipartFormDataStream.AddFormField()而不是字符串重载版本,然后您可以按照自己的意愿在输入TStream中存储数据,并根据TIdFormDataField.ContentTransfer属性的值对其进行编码。这将删除您获得的%20

你需要解码信息。看看这个问题中你认为需要解码的HTML在哪里,@Tim?你需要解码消息。看看这个问题中你认为需要解码的HTML在哪里,@Tim?是的,我通知了Tropo,谢谢。是的,我通知了Tropo,谢谢。