TidHttp和XE3

时间:2013-08-21 11:10:02

标签: delphi http indy delphi-xe3

最近从Delphi 2006转换到XE3的程序,我遇到了TidHttp的问题。这是代码:

Result := '';
myCurrentTime := FormatDateTime('yyyymmddhhnnss',now);

myParams := '<params>';
myParams := myParams + '<licence>' + '1234567890' + '</licence>'; 
myParams := myParams + '<activationcode>' + 'abcdef' + '</activationcode>'; 
myParams := myParams + '<devicename>' + 'aaa' + '</devicename>'; 
myParams := myParams + '<deviceid>' + 'bbb' + '</deviceid>'; 
myParams := myParams + '<devicetimestamp>' + myCurrentTime + '</devicetimestamp>';
myParams := myParams + psRequest;
myParams := myParams + '</params>';

myRequestStream := nil;
myResponseStream := nil;
myHTTP := nil;
myXMLDocument := nil;

finished := false;
myAttempts := cAttempts;

while finished = false do
begin
try
  myRequestStream := TMemoryStream.Create;
  myResponseStream := TMemoryStream.Create;
  myHTTP := TIdHTTP.Create;
  myXMLDocument := TXMLDocument.Create(nil);

  myParams := mEncoder.Encode(myParams);

  myRequestStream.Write(myParams[1], Length(myParams));
  myRequestStream.Position := 0;

  myHTTP.Request.Method := 'POST';
  myHTTP.ReadTimeout := piTimeoutSeconds * 1000;
  myHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
  myHTTP.Request.ContentLength := myRequestStream.Size;
  myHTTP.ProtocolVersion := pv1_1;

  myHTTP.Post(psUrl, myRequestStream, myResponseStream);

在帖子之后,我收到错误'异常被提升为Base 64字符串中的无效字符' - 这在错误处理例程中被报告为'{'。

我一直在网上搜索但找不到答案。任何建议都将不胜感激。

感谢。

史蒂夫

1 个答案:

答案 0 :(得分:0)

您只将一半的请求详细信息放入流中。在Delphi 2009中,string成为Unicode类型,其中每个字符占用两个字节。 Length测量字符,而TStream.Write需要字节数。

一个简单的解决方案是将myParams更改为AnsiString