Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2015, 12:50   #1
Prostaf
Пользователь
 
Регистрация: 09.09.2015
Сообщений: 25
По умолчанию Клиент idHTTP, отправка GET запроса серверу.

Здравствуйте, уважаемые. Прошу помочь. Написал сервер на idhttpserver, функции сервера прием get запроса. Теперь требуется написать клиент на idhttp, чтобы клиент посылал тот самый get запрос серверу(пока что по локальной сети). Запрос идет на http://<URL>:8443/payment_app.cgi?command=check&txn_i d=1234567&account=101&sum=10.45.

command, txn_id, account и sum определенные параметры, которые должен проверять сервер и выдавать ответ в .xml файле типа
Цитата:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<osmp_txn_id>1234567</osmp_txn_id>
<result>0</result>
<comment></comment>
<pay_id>XXXX</pay_id>
</response>
Сервер уже умеет парсить .xml ответ, который заготовлен и лежит на диске.

Сам код сервера
Код:
unit uMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComObj, MSXML, xmldom, XMLIntf, msxmldom, XMLDoc, ActiveX;

type
  TfrmMain = class(TForm)
    Panel1: TPanel;
    bnStop: TButton;
    bnStart: TButton;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    edMessage: TMemo;
    edLog: TMemo;
    XMLDocument1: TXMLDocument;
    Button1: TButton;
    procedure bnStartClick(Sender: TObject);
    procedure bnStopClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    procedure SetBtnsState;
    procedure ShowError (const s: string; const args: array of const);
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

uses
uServer;

resourcestring
  SERROR_START = 'Error occured while starting server.'#$D#$A'\s';
  SERROR_STOP = 'Error occured while stopping server.'#$D#$A'\s';

procedure TfrmMain.bnStartClick(Sender: TObject);
begin
try
 dmServer.Server.Active := True;
 edMessage.Lines.Add('Ожидание клиента ' + DateTimeToStr(now));
 edLog.Lines.Add('Сервер успешно запущен ' + DateTimeToStr(now));
except
  on E: Exception do
      ShowError (SERROR_START, [E.Message]);
end;
  SetBtnsState;
end;

procedure TfrmMain.bnStopClick(Sender: TObject);
begin
  try
   dmServer.Server.Active := False;
   edMessage.Lines.Add('Клиенты не принимаются  ' + DateTimeToStr(now));
   edLog.Lines.Add('Работа сервера приостановлена ' + DateTimeToStr(now));
  except
    on E: Exception do
    ShowError (SERROR_STOP, [E.Message]);
  end;
  SetBtnsState;
end;

procedure TfrmMain.Button1Click(Sender: TObject);
var
  xml: TXMLDocument;
  i: Integer;
  txn_id, pay_id, result,comment: string;
  node:IXMLNode;
begin
  CoInitialize(Nil);
try
  xml := TXMLDocument.Create(frmMain);
  xml.LoadFromFile('D:\otvet.xml');
  xml.Active := True;
  for i := 0 to XML.DocumentElement.ChildNodes.Count - 1 do
begin
   node:= xml.DocumentElement.ChildNodes.Get(i);
    //xml.DocumentElement.ChildNodes.g
   // pay_id := xml.DocumentElement.ChildNodes[i].ChildNodes['pay_id'].Text;
    //edLog.Lines.Add(node.NodeName+' '+node.Text);
   edMessage.Lines.Add(node.Text);
   //edLog.Lines.Add(txn_id);

end;
  xml.Active := False;
  xml := Nil;
finally
  CoUninitialize;
end;

end;

procedure TfrmMain.SetBtnsState;
begin
bnStart.Enabled := NOT dmServer.Server.Active;
bnStop.Enabled := NOT bnStart.Enabled;
  end;
procedure TfrmMain.ShowError(const s: string; const args: array of const);
begin
  MessageDlg(Format(s, args), mtError, [mbOK], 0);
end;
  end.
Код:
unit uServer;

interface

uses
  SysUtils, Classes, IdBaseComponent, IdComponent, IdCustomTCPServer,
  IdCustomHTTPServer, IdHTTPServer, IdContext, uMain, Dialogs;

type
  TdmServer = class(TDataModule)
    Server: TIdHTTPServer;
    procedure ServerCommandGet(AContext: TIdContext;
      ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  dmServer: TdmServer;

implementation

{$R *.dfm}

uses
  uClientContext;

procedure TdmServer.DataModuleCreate(Sender: TObject);
begin
  //Server.ContextClass := TClientContext;
end;

procedure TdmServer.ServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
//var
//  LClientContext: TClientContext;
begin
//  LClientContext := TClientContext (AContext);
//  LClientContext.HelloMessage :=  frmMain.edMessage.Text;
//  LClientContext.LogStrings := frmMain.edLog.Lines;
//  LClientContext.HandleRequest(ARequestInfo, AResponseInfo);
  //(AContext.Connection.Socket.ReadLn);
  AContext.Connection.Socket.ReadLn;
  AContext.Connection.Socket.WriteLn(frmMain.edMessage.Text+#13#10);
  AContext.Connection.Disconnect;
end;

end.

Последний раз редактировалось Stilet; 09.09.2015 в 13:00.
Prostaf вне форума Ответить с цитированием
Старый 09.09.2015, 13:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так а в чем проблема?
Код:
var s:string
...
s:=IdHTTP.Get('http://<URL>:8443/payment_app.cgi?command=check&txn_i d=1234567&account=101&sum=10.45. ');
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2015, 13:32   #3
Prostaf
Пользователь
 
Регистрация: 09.09.2015
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Так а в чем проблема?
Как прочитать параметры сервером, которые отображаются в запросе?
Prostaf вне форума Ответить с цитированием
Старый 09.09.2015, 13:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ARequestInfo.Params['account'] даст 101
Ну и так далее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация запроса к серверу DBPorgrammer C/C++ Сетевое программирование 0 21.01.2013 09:19
ftp-клиент отправка запроса. Silver_Swift C/C++ Сетевое программирование 9 01.11.2012 11:25
Передача параметров серверу в idHTTP C_R_E_S_C_H Работа с сетью в Delphi 4 06.05.2012 16:58
Вопрос по клиент-серверу xStill Работа с сетью в Delphi 0 01.03.2010 14:46
Отправка запроса на AMFPHP гейт через idHTTP ZaRDaK Работа с сетью в Delphi 8 04.09.2009 20:03