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