首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Indy在Delphi 5/Android平台上的TIdMultipartFormDataStream怪异行为

Indy在Delphi 5/Android平台上的TIdMultipartFormDataStream怪异行为
EN

Stack Overflow用户
提问于 2013-11-11 20:05:52
回答 2查看 2.7K关注 0票数 2

我正在尝试使用Indy的TIdHTTP组件将数据发送到网站。代码在Windows平台上运行良好,但不幸的是,它在Android平台上的行为很奇怪。当我使用TIdMultipartFormDataStream发送POST参数时会出现问题。

在Android上,TIdMultipartFormDataStream的行为很奇怪,发生了这样的事情:假设POST数据是myparam=myvalue,其中"myparam“是参数名,而"myvalue”是参数值。

参数值被更改为{第一个字符删除}{ null字符},因此最后的输出将类似于这个yvalue\x00,其中\x00是空字符。

我可以用TIdMultipartFormDataStream代替TStringList,我不会面对这样的问题,但是我更喜欢使用TIdMultipartFormDataStream,因为它使我能够同时上传文件+发送POST数据。

样本代码:

代码语言:javascript
复制
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;

注意:代码使用DelphiXE5和Delphi XE5更新1进行了测试

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 06:07:30

您所描述的是一个ZEROBASEDSTRINGS错误,它不应该存在于当前的SVN版本中,因为Indy在它的所有单元中都禁用了ZEROBASEDSTRINGS,因为它在XE4中一直存在大量的ZBS错误。所以我建议你升级到最新的SVN版本。如果你在这方面有问题,请更新你的问题,详细解释原因。

票数 1
EN

Stack Overflow用户

发布于 2014-05-24 23:53:26

工作..。

代码语言:javascript
复制
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', UTF8Encode('user1'), 'utf-8').ContentTransfer:= '8bit';

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

      finally
        POSTData.Free;
      end;
    end;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19914910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档