[英]How to send data to a PHP script and imediatelly get data back from the same script
我在這里有一個類似的問題,但它面向PHP方面。 看起來PHP能夠接收一個數據包並立即(在同一個會話中)發送和回復。 我的問題是Delphi能做到嗎? 據我所知,答案是一個很大的NO。 我需要分兩步完成(兩個程序)。 問題是當第一個程序結束時,會話可能會關閉。 我可以在兩個過程調用之間保持會話打開。
我將為您提供PHP
和Delphi
示例代碼。 我們將使用GET
請求方法,因為它更容易,如果您不需要發送太多數據就足夠了。 我將從PHP
腳本開始,因為它可以單獨測試,沒有Delphi
應用程序(我們將使用瀏覽器進行測試)。
<?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
要分解我們在瀏覽器中寫入的URL:我們從服務器localhost
請求頁面/script.php
,我們將此查詢字符串傳遞給腳本: a=2&b=3
。 之后的東西?
在URL中是查詢字符串; &
符號分隔兩個單獨的參數=值對: a=2
和b=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;
我故意將正確的工作URL留在那里,所以你可以實際測試我已知的工作腳本。
以下是您調用此例程的方法:
procedure TForm8.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(MultiplyTwoNumbers(3,4)));
end;
Delphi app makes two calls, first to SendID then a second to GetDataBack
想法不起作用,因為調用時服務器上運行的東西(實際上是GET) GetDataBack
根本不知道有人調用(再次GET
) SendID
。 GET
數據時,我們可以使用查詢字符串輕松發送一些信息。 如果我們需要發送大量信息,我們將使用POST
請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.