PDA

Просмотр полной версии : IdHTTP1.Post куча запросов. как?


lck
22.08.2011, 12:44
Подскажите с Indy. Посмотрел нашел только потоки..
почему нельзя послать несколько запросов с Id[Ссылки могут видеть только зарегистрированные и активированные пользователи] одной кнопкой? Мне надо около 100 запросов.. если кидать на форму 100 компонентов Id[Ссылки могут видеть только зарегистрированные и активированные пользователи] этож... капец..
а мне надо ещё с разными параметрами...

по кнопке жмём

p1:=TStringList.Create;
p1.Add('b=1');
p1.Add('uid=54776');
p1.Add('session_key=4');
p1.Add('auth_key=4');
p1.Add('app_id=277504');
p1.Add('ndb=5');
p1.Add('c=all');
p1.Add('vid=179771652096');
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('site',p1);
p1.Free;

p1:=TStringList.Create;
p1.Add('b=1');
p1.Add('uid=54776');
p1.Add('session_key=4');
p1.Add('auth_key=4');
p1.Add('app_id=277504');
p1.Add('ndb=5');
p1.Add('c=all');
p1.Add('vid=179771652096');
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',p1);
p1.Free;


и ругается... Access Violишн по адресу 00000000
я так понимаю что всё изза Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]
если уж нельзя так. подскажите что нить альтернативное плиз.
Спс!

VeTaL_UA
22.08.2011, 13:24
Мне надо около 100 запросов
Так что тебе мешает запустить эти запросы в потоках?) и вообще у тебя код какой-то кривоватенький...

lck
22.08.2011, 13:40
1) а без потоков как быть (с потоками не разобрался пока ещё...)?
2) ну код работает нормально.. если только 2 штуки Id[Ссылки могут видеть только зарегистрированные и активированные пользователи] кинуть на форму ну и подправить нумерацию..

Duha666
22.08.2011, 14:07
Зачем кидать на форму? Можно прямо в программе создать нужно количество(динамическое создание, о как :)).
На примере TButton это выглядит вот так:

var
a: array[1..100] of TButton;
begin
for i := 1 to 100 do
begin
a[i] = TButton.Create(nil); // Теперь можно выполнять все действия, что и с обычной кнопкой
a[i].caption := "Button " + inttostr(i); // Пример изменения текста на кнопках
end;
end;



Почитать может хотя бы здесь: [Ссылки могут видеть только зарегистрированные и активированные пользователи]

lck
22.08.2011, 14:15
ООО как вариант это тема! всем спасиба!

Dinmaite[Work]
22.08.2011, 15:27
А что мешает [Ссылки могут видеть только зарегистрированные и активированные пользователи]() кинуть в цикл и не морочить себе голову совсем?

Duha666
22.08.2011, 15:34
;1673908']А что мешает [Ссылки могут видеть только зарегистрированные и активированные пользователи]() кинуть в цикл и не морочить себе голову совсем?

Копипаст, который в первом посте так и должен был себя вести. Никогда не работал с сетью в Delphi, но предположу, что нужно после каждой посылки очищать запрос, хотя...

lck
25.08.2011, 15:28
В цикле не работает! пишет Акцесс виолишн адрес 0000000, с потоками так и не разобрался..
1)создаю поток. там прописываю то что надо отправить
2) В программе вызываю поток.
3) мне надо изменить данные в отправке.. это ведь надо в потоке менять..
кароче сколько бьюсь не могу понять. как вот это в потоке поменять?

Это 1 pапрос b=1

p1:=TStringList.Create;
p1.Add('b=1');
p1.Add('uid=54776');
p1.Add('session_key=4');
p1.Add('auth_key=4');
p1.Add('app_id=277504');
p1.Add('ndb=5');
p1.Add('c=all');
p1.Add('vid=179771652096');
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('site',p1);
p1.Free;

Это 2 Запрос. там тока b=2

p1:=TStringList.Create;
p1.Add('b=2');
p1.Add('uid=54776');
p1.Add('session_key=4');
p1.Add('auth_key=4');
p1.Add('app_id=277504');
p1.Add('ndb=6');
p1.Add('c=all');
p1.Add('vid=179771652096');
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',p1);
p1.Free;

Duha666
25.08.2011, 15:54
На какой из команд происходит Access Violation при циклах, или как в самом начале ты написал? Попробуй отдебагать(F7/F8 и т.д.) программу и найти эту строчку. это хоть что-то даст.

Mebius
25.08.2011, 21:52
//тут заполняешь стринглист

for i:=0 to 99 do
s:=Id[Ссылки могут видеть только зарегистрированные и активированные пользователи](url,Data);


фикс аксес войлейшн:



for i:=0 to 99 do
try
s:=Id[Ссылки могут видеть только зарегистрированные и активированные пользователи](url,data);
except
end;

в обоих случаях s:= не обязательно.


Duha666, предложил решение индусов xD без обид)

Blad56(2), аналогично, если ему просто отправить 100 раз одно и тоже надо, достаточно цикла с антифризом.

у тс тоже код индусский какой то. все делается на много проще



procedure TForm1.Button1Click(Sender: TObject);
var
p1:TStringList; i:integer;
begin
p1:=TStringList.Create;
p1.Add('b=1');
p1.Add('uid=54776');
p1.Add('session_key=4');
p1.Add('auth_key=4');
p1.Add('app_id=277504');
p1.Add('ndb=5');
p1.Add('c=all');
p1.Add('vid=179771652096');
try
for i:=0 to 99 do
begin
try
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',p1);
except
end;
end;
finally
p1.free;
end;
end;



мог чуть ошибиться тк писал прямо тут)

Duha666
26.08.2011, 05:09
Duha666, предложил решение индусов xD без обид)
Можно справится одним Id[Ссылки могут видеть только зарегистрированные и активированные пользователи] да.(Один из вопросов был, как сделать 100 idHTTP)
В каждом запросе данные разные, приглядись(не понятно почему, но в первом сообщении запросы одинаковые). Так что и твоя реализация на циклах отпадает.

Можно попробовать написать процедуру, которая заполняет все-это особым образом(если это возможно)

VeTaL_UA
26.08.2011, 11:20
А разве так:
var
s:TStringList;
i:integer;
begin
for i=1 to 100 do
begin
s.Create;
s.Add('b='+inttostr(i));
s.Add('uid=54776');
s.Add('session_key=4');
s.Add('auth_key=4');
s.Add('app_id=277504');
s.Add('ndb=5');
s.Add('c=all');
s.Add('vid=179771652096');
try
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('site',s);
finally
s.Free;
end;
end;
end;
нельзя?

Duha666
26.08.2011, 12:43
p1 и s перепутал. Ничем не отличается от кода выше, но лишние 99 раз заполняешь p1

VeTaL_UA
26.08.2011, 13:35
p1 и s перепутал.
Исправлено.
Ничем не отличается от кода выше, но лишние 99 раз заполняешь p1
А как же?:
s.Add('b='+inttostr(i));

Duha666
26.08.2011, 14:31
Не заметил. Если b меняется таким образом, то это единственное нормальное решение.

Mebius
26.08.2011, 16:07
Можно справится одним Id[Ссылки могут видеть только зарегистрированные и активированные пользователи] да.(Один из вопросов был, как сделать 100 idHTTP)
В каждом запросе данные разные, приглядись(не понятно почему, но в первом сообщении запросы одинаковые). Так что и твоя реализация на циклах отпадает.

Можно попробовать написать процедуру, которая заполняет все-это особым образом(если это возможно)

кто мешает после запроса изменить строчку в стринглисте на другую и все это делать в цикле?



procedure TForm1.Button1Click(Sender: TObject);
var
p1:TStringList; i:integer;
begin
p1:=TStringList.Create;
p1.Add('b=1');
p1.Add('uid=54776');
p1.Add('session_key=4');
p1.Add('auth_key=4');
p1.Add('app_id=277504');
p1.Add('ndb=5');
p1.Add('c=all');
p1.Add('vid=179771652096');
try
for i:=0 to 99 do
begin
try
Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',p1);
p1[0]:='d='+StrToInt(i);
except
end;
end;
finally
p1.free;
end;
end;



мой код правильный тк он заведомо был чуть не так как надо написан, как человек научится мыслить и программировать если на каждом форуме ему будут писать полностью готовое идеальное решение!?

если надо именно 1-100 то 0 меняется на 1 а 99 на 100