ورود

View Full Version : گفتگو: دریافت اطلاعات از سرور اپاچی



m_basij
چهارشنبه 04 اسفند 1389, 21:00 عصر
با سلام .
من تازه شروع به کار نوشتن یک مرورگر خیلی کوچک کردم . بدین شکل که مثلا کاربر با وارد شدن در نرم افزار توسط نرم افزار بتونه تقاضای شارژ مجدد و .. رو بده . اول اینکه آیا من یک کلاینت و سرور بنویسم باسه این بهتره یا اینکه از همون apache استفاده کنم؟
دوم اینکه من الان می خواهم یک صفحه وب ر باز کنم ولی وقتی به سرور اتصال پیدا میکنم با پرت 80چیزی سرور برای من نمی فرسته حتی من GET/hypertext/www/index.html را هم برای سرور ارسال می کنم ولی جوابی نمی یاد. ایراد چیه ؟
سوال سومم اینه که قرارداد هایی که در جواب درخواست های سرور باید ارسال کنم چیه و سرور چه درخواست هایی ارسال می کنه و چه مفهومی دارن.( در ضمینه برنامه نویسی php هم نیم تخصصی دارم).

vcldeveloper
پنج شنبه 05 اسفند 1389, 16:51 عصر
دوم اینکه من الان می خواهم یک صفحه وب ر باز کنم ولی وقتی به سرور اتصال پیدا میکنم با پرت 80چیزی سرور برای من نمی فرسته حتی من GET/hypertext/www/index.html را هم برای سرور ارسال می کنم ولی جوابی نمی یاد. ایراد چیه ؟
درخواست رو به چه طریقی فرستادید؟ جواب را به چه طریقی چک کردید؟


سوال سومم اینه که قرارداد هایی که در جواب درخواست های سرور باید ارسال کنم چیه
چه نوع درخواستی؟

m_basij
پنج شنبه 05 اسفند 1389, 17:27 عصر
والا درخواستا با سوکت فرستادم اینم کل کدم (خلاصش کردم قسمت های اضافه برنامه را حذف کردم)

unit index;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, acHTMLViewer, ScktComp;

type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
acHTMLViewer1: TacHTMLViewer;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if (ClientSocket1.Active) then
begin
ClientSocket1.Active:= false;
acHTMLViewer1.HTML.Add('disable');
end else
begin
ClientSocket1.Address:='46.19.139.210';
ClientSocket1.Port:=80;
ClientSocket1.Active:= true;
acHTMLViewer1.HTML.Add('connect');
end
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
acHTMLViewer1.HTML.Add('cli-connect');
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
acHTMLViewer1.HTML.Add('cli-dissconet');
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
acHTMLViewer1.HTML.Add(Socket.ReceiveText);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText('GET/hypertext/www/index.html');
end;

end.
منظورم قرار دادهای http هستن مثلا وقتی یک کوکی را میگه ذخیره کن یا می خواد یک کوکی را بخونه و ... چی برای من میفرسته و چی جوابش باید بدم.
با تشکر

vcldeveloper
یک شنبه 08 اسفند 1389, 02:17 صبح
من با اون کامپوننت های قدیمی ClientSocket کار نکردم، اگر از دلفی 7 یا نسخه های بعد از آن استفاده می کنید، باید Indy هم داشته باشید. از IdHttp و متد Get آن برای ارسال یک درخواست GET به سرور استفاده کنید، و ببینید آیا داده ایی برگشت داده میشه یا نه؟ اگر با Indy کار کرد، بهتره با همون Indy کار کنید که هم قابلیت های بیشتری داره، هم پروتکل های متعددی رو پیاده سازی کرده، هم باگ کمتری داره، و هم اینکه همچنان توسعه داده میشه، و Obsolete نشده. اگر بعد از تست با IdHttp که یک HTTP Client هست، مایل بودید که حتما خودتان HTTP را روی TCP پیاده سازی کنید، می تونید به جای IdHttp از IdTcpClient برای ارسال متن به سرور استفاده کنید.