Как отправить данные в PHP-скрипт и немедленно получить данные из того же скрипта - PullRequest
4 голосов
/ 19 февраля 2011

У меня есть похожий вопрос здесь , но он был ориентирован на сторону PHP. Похоже, что PHP способен получать пакет данных и немедленно (в том же сеансе) отправлять и отвечать обратно. Мой вопрос: может ли Delphi сделать это? Из того, что я знаю, ответ большой НЕТ. Мне нужно сделать это в два этапа (две процедуры). Дело в том, что сессия, вероятно, будет закрыта, когда закончится первая процедура. Могу ли я оставить сеанс открытым между двумя вызовами процедур.

1 Ответ

12 голосов
/ 19 февраля 2011

Я собираюсь дать вам пример кода для 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 запросы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...