我正在尝试使用 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/