gpt4 book ai didi

Delphi indy调用php脚本

转载 作者:行者123 更新时间:2023-12-03 15:51:39 27 4
gpt4 key购买 nike

我的服务器中有一个非常简单的 PHP 脚本,因为他只有一个任务:在 SQL 数据库中存储两个数据。

http://mydomain.it/test.php?id=285&numero=504;

如果您在浏览器中打开此网址,您将在 SQL 表中添加一行,如下所示

enter image description here

我也希望能够使用 firemonkey 将数据存储在数据库中,并且我在我的应用程序中放置了两个 TEdit 和一个 TButton。单击此代码执行的按钮:

var url: string;
H: TIdHttp;
SS: TStringStream;
begin
url := 'http://mydomain.it/test.php?id='+IntToStr(a)+'&numero='+IntToStr(b);
H := TIdHttp.Create(nil);
try
SS := TStringStream.Create;
try

try
H.Post(url, SS);
except
on E:Exception do
ShowMessage(e.Message);
end;

finally
SS.Free;
end;
finally
H.Free;
end;

上面的代码运行得很好,因为它只需要 1 秒即可运行,并且我捕获了异常(仅用于调试目的)。我有两个主要问题:

  1. 这是我第一次使用 indy,据我所知,这是完成我需要的事情的好方法。我不确定我是否已将 try- except 放置在正确的位置;是吗?

  2. 如果互联网连接速度很慢怎么办?我应该使用下面的代码吗?

代码

var process: array of ITask;
begin

SetLength(process, 1);

process[0] := TTask.Create(
procedure
var url: string;
H: TIdHttp;
SS: TStringStream;
begin
url := 'http://mydomain.it/test.php?id='+IntToStr(a)+'&numero='+IntToStr(b);
H := TIdHttp.Create(nil);
try
SS := TStringStream.Create;
try
try
H.Post(url, SS);
except
on E:Exception do
ShowMessage(e.Message);
end;
finally
SS.Free;
end;
finally H.Free;
end;
end
);
process[0].Start;

TTask.WaitForAll(process);
Label1.Text := 'done!!';

end;

第 2 部分中的代码存在一些问题并且无法运行。有什么想法吗?

最佳答案

首先,当您在浏览器中输入 URL 时,它会发送 GET 请求,而不是 POST 请求。您应该使用 TIdHTTP.Get() 而不是 TIdHTTP.Post():

var
url: string;
H: TIdHTTP:
begin
url := 'http://mydomain.it/test.php?id='+IntToStr(a)+'&numero='+IntToStr(b);
try
H := TIdHTTP.Create(nil);
try
H.Get(url);
// or:
// H.Get(url, TStream(nil));
finally
H.Free;
end;
except
on E: Exception do
ShowMessage(e.Message);
end;
end;

现在,回答您的问题:

一般来说,您展示的 try/except 就可以了。我更喜欢将 try/finally 放在 try/except 中,如上所示,而不是相反。但根据您实际使用代码的位置,try/except 可能是多余的,可以省略。

对于 Internet 连接问题 - 一般来说,是的,您应该在任务/线程中执行 HTTP 操作,而不是在主 UI 线程中:

begin
TTask.Create(
procedure
var
url, msg: string;
H: TIdHTTP;
begin
try
url := 'http://mydomain.it/test.php?id='+IntToStr(a)+'&numero='+IntToStr(b);
H := TIdHTTP.Create(nil);
try
H.Get(url);
// or:
// H.Get(url, TStream(nil));
finally
H.Free;
end;
msg := 'done!!';
except
msg := 'error!!';
end;
TThread.Queue(nil,
procedure
begin
Label1.Text := msg;
end;
);
end
).Start;
end;

关于Delphi indy调用php脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40455145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com