【发布时间】:2013-11-11 20:05:52
【问题描述】:
我正在尝试使用 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 测试的
【问题讨论】:
标签: android delphi indy10 delphi-xe5