android - Indy 的 TIdMultipartFormDataStream 在 Delphi XE5/Android 平台上的奇怪行为

标签 android delphi indy10 delphi-xe5

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

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

参数值更改为 {FIRST CHARACTER REMOVED}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 错误。所以我建议你升级到最新的 SVN 版本。如果您在这样做时遇到问题,请更新您的问题并详细说明原因

关于android - Indy 的 TIdMultipartFormDataStream 在 Delphi XE5/Android 平台上的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914910/

相关文章:

android - Genymotion 错误 - VirtualBox DHCP 服务器尚未为虚拟设备分配 IP 地址

java - 永远在后台运行服务

java - 在 ext2 文件系统的根目录中创建一个新文件

javascript - 按键事件未在移动设备上运行

delphi - 当密码为俄语时,通过 HTTPS 授权失败 TIdHTTP

delphi - 我可以从 FormCreate 调用 TIdTCPClient 函数吗?

delphi - 在Delphi中获取发送方组件的数组索引

delphi - 用常规程序处理类事件(Delphi)

delphi - 使用Delphi XE7和Indy类创建亚马逊MWS签名

security - Indy HTTP 服务器是否有内置方法来为某些文件/扩展分配安全性?