HTTP向SMS发送文本服务在文本Delphi 2007中获得%20
我正在使用Indy向一个短信服务发送帖子,该服务将发送短信,但短信文本在我的手机上以%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
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,谢谢。