PDA

Просмотр полной версии : [Обсуждение] помогите плиз


drui7
26.01.2011, 11:41
хочу научиться отсылать и получать POST запросы в самодельной программе написанной на дельфи) пожалуйста скиньте исходник для чего нибудь работающего с этими запросами.или помогите советом,как это лучше сделать

Nice42rus
26.01.2011, 13:03
procedure TForm1.Work;
var
PostData: TStringList;
work: String;
begin
PostData := TStringList.Create;
PostData.Add('key=' + AuthKey);
PostData.Add('action_id=' + ActionId.text);
PostData.Add('user=' + vkid);
PostData.Add('city=' + CityId.text);
PostData.Add('sig=' + IntToStr(random(10)) + IntToStr(random(10)) +
IntToStr(random(10)) + 'c26db0521' + IntToStr(random(10)) +
IntToStr(random(10)) + IntToStr(random(10)) + 'a30ee7084f562d0e4');
PostData.Add('action_type=3');
PostData.Add('method=doCityAction');
try
work := Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]
('[Ссылки могут видеть только зарегистрированные и активированные пользователи]', PostData);
finally
PostData.Free;
end;
end;


Вот тебе пример кода для посылке запроса на выполнение "движух на зонах", если есть хоть какието знание в делфи то разберёшься! Тут о основном используется компонент Indy HTTP для посылки post запросов

drui7
26.01.2011, 14:14
спасибо,сейчас опробую. а как получать в ответ запросы с сервера,находить переменные и выводить в label ??

Nice42rus
26.01.2011, 14:54
procedure TForm1.work;
var
PostData: TStringList;
work: String;
begin
PostData := TStringList.Create;
PostData.Add('key=' + auth.text);
PostData.Add('action_id=' + NomerZadanya.text);
PostData.Add('user=' + userVKid.text);
PostData.Add('city=1');
PostData.Add('sig=' + IntToStr(random(10)) + IntToStr(random(10)) +
IntToStr(random(10)) + 'c26db0521' + IntToStr(random(10)) +
IntToStr(random(10)) + IntToStr(random(10)) + 'a30ee7084f562d0e4');
PostData.Add('action_type=3');
PostData.Add('method=doCityAction');
try
work := Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]
('[Ссылки могут видеть только зарегистрированные и активированные пользователи]', PostData);
finally
begin
PostData.Free;
if work <> '' then
begin
Delete(work, 1, Pos('<energy>', work) + Length('<energy>') - 1);
work := Copy(work, 0, Pos('</energy>', work) - 1);
if work = '' then
work := '0';
Label1.Caption := work;
end;
end;
end;
end;



Вот, c помощью функций Pos, delete и copy.

Дело в том что после post запроса , переменная work содержет в себе ответ от сервера которй содержит в данном случае информацию о том, сколько осталось энергии

drui7
26.01.2011, 18:04
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, Id[Ссылки могут видеть только зарегистрированные и активированные пользователи] XPMan;

type
TForm1 = class(TForm)
Button1: TButton;
XPManifest1: TXPManifest;
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи] TId[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
PostData: TStringList;
work: String;
auth,NomerZadanya,userVKid:shortstring;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
PostData := TStringList.Create;
PostData.Add('key=' + auth);
PostData.Add('action_id=' + NomerZadanya);
PostData.Add('user=' + userVKid);
PostData.Add('city=1');
PostData.Add('sig=' + IntToStr(random(10)) + IntToStr(random(10)) +
IntToStr(random(10)) + 'c26db0521' + IntToStr(random(10)) +
IntToStr(random(10)) + IntToStr(random(10)) + 'a30ee7084f562d0e4');
PostData.Add('action_type=3');
PostData.Add('method=doCityAction');
try
work := Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]
('[Ссылки могут видеть только зарегистрированные и активированные пользователи]', PostData);
finally
begin
PostData.Free;
if work <> '' then
begin
Delete(work, 1, Pos('<energy>', work) + Length('<energy>') - 1);
work := Copy(work, 0, Pos('</energy>', work) - 1);
if work = '' then
work := '0';
Label1.Caption := work;
end;
end;
end;

end;

end.
[Ссылки могут видеть только зарегистрированные и активированные пользователи] ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
вот так получилось...говорит,что дубликат ресурса...хм

Nice42rus
26.01.2011, 18:48
Держи исходник, всё работает

drui7
26.01.2011, 18:54
спасибо конечно) но я в своём хотел разобраться чтоб потом не ошибаться так

Nice42rus
26.01.2011, 19:36
Эта общая ошибка заключается не в коде а в файлах.
Удали из каталога с проектом все файлы *.RES к едрене фене. Пусть перекомпилируются заново. У тебя путаница (повтор) в ресурсах.

drui7
26.01.2011, 19:56
спасибо.учту.кстати, у меня почему то не пишет кол-во енергии...в том,который ты скинул...(

Nice42rus
27.01.2011, 11:57
Если не работает значит ты ввёл неверные данные!

drui7
27.01.2011, 12:19
хм...я не мог ввести неверные данные...только если опять аучи сменили...хм