TIdMultipartFormDataStream

TIdMultipartFormDataStream

我正在尝试使用Indy的TIdHTTP组件将数据发送到网站。
该代码在Windows平台上可以完美地运行,但是不幸的是,在Android平台上,它的行为异常。当我使用TIdMultipartFormDataStream发送POST参数时,会发生问题。

在Android平台上,TIdMultipartFormDataStream的行为异常,因此会发生以下情况:
假设您的POST数据是myparam = myvalue,其中“ myparam”是参数名称,“ myvalue”是参数值。

参数值已更改为{FIRST CHARACTER} yvalue {NULL CHARACTER},因此最终输出将类似于yvalue \ x00,其中\ x00是空字符。

我可以用TStringList替换TIdMultipartFormDataStream,但我不会遇到此类问题,但我更喜欢使用TIdMultipartFormDataStream,因为它使我可以同时上传文件和发送POST数据。

样例代码:

procedure HTTPPOST;
var
  HTTP: TIdHTTP;
  POSTData: TIdMultipartFormDataStream;
begin
  HTTP := TIdHTTP.Create(nil);
  POSTData := TIdMultipartFormDataStream.Create;

  try
    POSTData.AddFile('myfile','file.txt'); // works
    POSTData.AddFormField('username', 'user1'); // On Android the value gets changed to ser1\x00 where \x00 = Null character

    HTTP.Post('http://www.example.com', POSTData)

  finally
    POSTData.Free;
  end;
end;


注意:该代码已使用Delphi XE5和Delphi XE5 Update 1进行了测试。

最佳答案

您所描述的听起来像是ZEROBASEDSTRINGS错误,在当前的SVN版本中不应该存在,因为Indy在XE4中一直遭受许多ZBS错误困扰后,Indy全面禁用了所有单元中的ZEROBASEDSTRINGS。因此,我建议您升级到最新的SVN版本。如果这样做有问题,请更新您的问题,并详细说明原因

10-05 22:26