Я собираюсь дать вам пример кода для PHP
и Delphi
.Мы собираемся использовать метод запроса 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
Чтобы разбить URL, который мы пишем в браузере: мы запрашиваем страницу /script.php
с сервера localhost
и передаем эту строку запроса скрипт: a=2&b=3
.Материал, который идет после ?
в URL, является строкой запроса;Символ &
разделяет две отдельные пары параметр = значение: a=2
и b=3
.На стороне PHP вы используете $a=$_GET['a']
, чтобы получить значение параметра a
.Это так просто!
Delphi code
Теперь, когда мы знаем, что скрипт 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;
Сводка
- HTTP не имеет состояния, у людей возникает множество проблем для поддержания какого-либо состояния.Ваша идея
Delphi app makes two calls, first to SendID then a second to GetDataBack
не работает, потому что объект, работающий на сервере, когда вы вызываете (на самом деле GET) GetDataBack
, понятия не имеет, что кто-то когда-то позвонил (GET
снова) SendID
. - Счастливокогда
GET
-ing данные с HTTP-сервера, мы можем использовать строку запроса, чтобы легко отправить некоторую информацию.Если нам нужно отправить много информации, мы будем использовать POST
запросы.