如何将数据发送到PHP脚本并立即从同一脚本中获取数据

时间:2011-02-19 12:16:50

标签: php delphi

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

1 个答案:

答案 0 :(得分:12)

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

这是PHP脚本:

<?php
  $a=$_GET['a'];
  $b=$_GET['b'];
  echo intval($a)*intval($b);
?>

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

http://localhost/script.php?a=2&b=3

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

6

要分解我们在浏览器中写的网址:我们要求服务器/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;

我故意在那里留下了正确的工作网址,因此您可以实际测试我已知的工作脚本。

以下是你如何称呼这个例程:

procedure TForm8.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(MultiplyTwoNumbers(3,4)));
end;

摘要

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