如何将数据发送到PHP脚本,并从同一脚本中恢复数据

WeG*_*ars 4 php delphi

我在这里有一个类似的问题,但它面向PHP方面.看起来PHP能够接收一个数据包并立即(在同一个会话中)发送和回复.我的问题是Delphi能做到吗?据我所知,答案是一个很大的NO.我需要分两步完成(两个程序).问题是当第一个程序结束时,会话可能会关闭.我可以在两个过程调用之间保持会话打开.

Cos*_*und 12

我要给你两个示例代码PHPDelphi.我们将使用GET请求方法,因为它更容易,如果您不需要发送太多数据就足够了.我将从PHP脚本开始,因为它可以单独测试,没有Delphi应用程序(我们将使用浏览器进行测试).

这是PHP脚本:

<?php
  $a=$_GET['a'];
  $b=$_GET['b'];
  echo intval($a)*intval($b);
?>
Run Code Online (Sandbox Code Playgroud)

此脚本需要在URL(a和b)中编码发送的两个值,将值相乘并返回答案.假设您正在运行LAMP的计算机上播放,并且您调用了此脚本script.php,如果您在浏览器上导航到此脚本:

http://localhost/script.php?a=2&b=3
Run Code Online (Sandbox Code Playgroud)

你会在浏览器中看到这个:

6
Run Code Online (Sandbox Code Playgroud)

要分解我们在浏览器中写入的URL:我们/script.php从服务器请求页面localhost,我们将此查询字符串传递给脚本:a=2&b=3.那去后的东西?中的URL查询字符串; 所述&符号分离两个单独的参数=值对:a=2b=3.在PHP端,您$a=$_GET['a']用来获取参数的值a.就这么简单!

德尔福代码

现在我们知道PHP脚本已启动并运行,我们可以转到Delphi部分.这是一个使用可以想象的效率最低的方法将两个值相乘的例程:

function MultiplyTwoNumbers(a,b:Integer):Integer;
var url: string;
    H: TIdHttp;
    SS: TStringStream;
begin
  // Prepare the URL
  url := 'http://fisiere.sediu.ro/script.php?a=' + IntToStr(a) + '&b=' + IntToStr(b);
  H := TIdHttp.Create(nil);
  try
    SS := TStringStream.Create;
    try
      H.Get(url, SS);
      Result := StrToInt(SS.DataString);
    finally SS.Free;
    end;
  finally H.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我故意将正确的工作URL留在那里,所以你可以实际测试我已知的工作脚本.

以下是您调用此例程的方法:

procedure TForm8.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(MultiplyTwoNumbers(3,4)));
end;
Run Code Online (Sandbox Code Playgroud)

摘要

  • HTTP是无状态的,人们在维持某种状态时会遇到很多麻烦.你的Delphi app makes two calls, first to SendID then a second to GetDataBack想法不起作用,因为当你打电话时(实际上是GET)在服务器上运行的东西GetDataBack不知道有人某个时候(GET再次)调用SendID.
  • 令人高兴的是,当GET来自HTTP服务器的数据时,我们可以使用查询字符串轻松发送一些信息.如果我们需要发送大量信息,我们会使用这些POST请求.

  • 不需要字符串流.这也有效:结果:= H.Get(url); (2认同)