Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Метод POST


Автор: Zlo 31.10.2004, 18:22
Люди тут проблема такая назрела:
Нада передовать скрипту на сервере данные типа логин,пароль,сайт,аська и т.д
Я для этого использую метод Post компанента TNMHTTP (Дельфя 6)
Но ничего у меня неполучается.
Посмотрел с помощью специальной проги как это делает ХТМЛ страница
Вот что показала прога:
Url:http://www.server.ru/phpBB2/profile.php?sid=eff213e8269595b0c6e0d85997c36eb1

PostData:username=Zlo-2&[email protected]&new_password=123&password_confirm=123&icq=268310&aim=&msn=&yim=&website=zlo-raspisanie.narod.ru&location=&occupation=&interests=&signature=%D0%E0%E7%F0%E0%E1%EE%F2%EA%E0+%EF%F0%EE%E3%F0%E0%EC%ED%EE%E3%EE+%EE%E1%E5%F1%EF%E5%F7%E5%ED%E8%FF%21&viewemail=0&hideonline=0&notifyreply=0&notifypm=1&popup_pm=1&attachsig=1&allowbbcode=1&allowhtml=0&allowsmilies=1&language=russian&style=1&timezone=3&dateformat=D+M+d%2C+Y+g%3Ai+a&mode=register&agreed=true&coppa=0&submit=%CE%F2%EF%F0%E0%E2%E8%F2%FC

Referer:http://www.server.ru/phpBB2/profile.php?mode=register&agreed=true

Насколько удалось выяснить неполучается нормально послать запрос из за третьей строки (Referer)
Народ помогите! как сделать чтоб с методом пост еще и отпровлять Referer?

Автор: z-END 31.10.2004, 19:24
Чет несовсем вопрос понял, но может быть вариант такой что
Цитата(Zlo @ 31.10.2004, 18:22)

Referer:http://www.server.ru/phpBB2/profile.php?mode=register&agreed=true
это есть метод GET и у меня есть сомнения что GET и POST могут работать вместе

Автор: p0s0l 31.10.2004, 19:31
К примеру, в TIdHTTP есть свойство Request, в нём можно поменять Referer
(IdHTTP1.Request.Refererer := 'http://www.server.ru/...т.д.')
Потом уже делаем IdHTTP1.Post (...);

Посмотри, может в NMHTTP есть подобное ?...

ЗЫ: реферер - это URL страницы, с которой происходит запрос...
(Т.е. на какой странице нажали линк, ведущий к твоей странице)...

Автор: Zlo 4.11.2004, 03:32
А подскажите как с помощью компонента TIdHTTP послать вот такой запрос
username=Zlo-2&[email protected]&new_password=123&password_confirm=123&icq=268310&aim=&msn=&yim=&website=zlo-raspisanie.narod.ru&location=&occupation=&interests=&signature=%D0%E0%E7%F0%E0%E1%EE%F2%EA%E0+%EF%F0%EE%E3%F0%E0%EC%ED%EE%E3%EE+%EE%E1%E5%F1%EF%E5%F7%E5%ED%E8%FF%21&viewemail=0&hideonline=0&notifyreply=0&notifypm=1&popup_pm=1&attachsig=1&allowbbcode=1&allowhtml=0&allowsmilies=1&language=russian&style=1&timezone=3&dateformat=D+M+d%2C+Y+g%3Ai+a&mode=register&agreed=true&coppa=0&submit=%CE%F2%EF%F0%E0%E2%E8%F2%FC

Автор: _hunter 4.11.2004, 12:51
пользуйся поиском:
http://forum.vingrad.ru/index.php?showtopic=31596

Автор: Zlo 4.11.2004, 19:06
Хорошо,
допутим Процедура пост выглядит так
Код

Post(URL: string; const Source: TStrings; const AResponseContent: TStream);


так вот
Url - это адрес скрипта которому передаются данные, а что такое
Код

const Source: TStrings

и
Код

const AResponseContent: TStream

Скажите плиз!

Автор: _hunter 4.11.2004, 21:02
IMHO в справке все понятно написанно:
Цитата
const Source: TStrings

Object containing the request data.

const AResponseContent: TStream

Destination for response data.

Автор: p0s0l 5.11.2004, 02:01
Source - данные запроса.
AResponseContent - ответ с сервера (напр., html-страница или файл).

При методе Post в запрос к серверу еще входят дополнительные данные (Source).
Это может быть какой-то файл (для закачки на сервер).
Но можно и параметры передавать (не всегда), например так:
Код
var s : TStringList;
begin
 s := TStringList.Create;
 s.Add('username=Zlo-2');
 s.Add('[email protected]');
 s.Add('new_password=123');
.. и т.д.
 Memo1.Text := IdHTTP1.Post ('http://www.server.ru/phpBB2/profile.php', s);
 s.Free;
end;

А в твоём случае надо сделать так:
Код

var s : TStringList;
begin
 s := TStringList.Create;
 Memo1.Text := IdHTTP1.Post ('http://www.server.ru/phpBB2/profile.php?username=Zlo-2&[email protected]&new_password=123...', s);
 s.Free;
end;

А если нет Post-данных, то проще так сделать:
Код
Memo1.Text := IdHTTP1.Get ('http://www.server.ru/phpBB2/profile.php?username=Zlo-2&[email protected]&new_password=123...');

Автор: Zlo 5.11.2004, 02:32
_hunter
Блин еслиб в справке понял я б сюды неписал.
Ну что ты за человек.

p0s0l
Пасиба, очень подробненько, как раз для ламеров smile

Автор: Zlo 6.11.2004, 16:41
p0s0l
Код

var s : TStringList;
begin
 s := TStringList.Create;
Memo1.Text := IdHTTP1.Post ('http://www.server.ru/phpBB2/profile.php?username=Zlo-2&[email protected]&new_password=123...', s);
 s.Free;
end;

А зачем там s?
В нее наверно надо чтото записать, если да то что?

Автор: _hunter 6.11.2004, 16:52
вопрос интересный smile
судя по записи, имелся в виду метод Get
и тогда достаточно такого:
Memo1.Text := IdHTTP1.Post ('http://www.server.ru/phpBB2/profile.php?username=Zlo-2&[email protected]&new_password=123...');

Zlo, а что именно ты не понял в справке?

Автор: Zlo 6.11.2004, 17:19
_hunter
В справке?
Да там все на ангилйском, а у меня с ним неочень smile


p0s0l
Вот сделал как ты написал
Код

var s : TStringList;
begin
 s := TStringList.Create;
Memo1.Text := IdHTTP1.Post ('http://www.server.ru/phpBB2/profile.php?username=Zlo-2&[email protected]&new_password=123...', s);
 s.Free;
end;

А дельфя говорит:
[Error] Unit1.pas(88): String literals may have at most 255 elements
Походу строка неможет быть больше 255 символов
И чего теперь делать?

Автор: _hunter 6.11.2004, 17:27
именно поэтому создатели того сайта ( с которого форма ) решили использовать метод POST.
тебе остается делать то же самое

Автор: Zlo 6.11.2004, 17:56
_hunter
Тоже самое это что?

Автор: _hunter 6.11.2004, 18:02
использовать метод POST smile

немного модифицирую код p0s0l:
Код

var s : TStringList;
     buffer: TStream;    
begin
 s := TStringList.Create;
 s.Add('username=Zlo-2');
 s.Add('[email protected]');
 s.Add('new_password=123');
.. и т.д.
 buffer = TMemoryStream.Create();
 IdHTTP1.Post ('http://www.server.ru/phpBB2/profile.php', s, buffer);
 buffer.Free();
 s.Free;
end;

Автор: p0s0l 6.11.2004, 20:07
Цитата(Zlo @ 6.11.2004, 16:41)

В нее наверно надо чтото записать, если да то что?
Дак уж тебе решать, что туда писать smile

Ты скажи конкретнее, какой запрос тебе надо послать ?
В большинстве случаев можно обойтись:
Код
IdHTTP1.Get('http://server/page.php?param1=value1&param2=value2&param3=value3...');


Автор: _hunter 6.11.2004, 22:41
не получится ( у него запрос для этого слишком длинный )

Автор: p0s0l 6.11.2004, 23:17
Цитата(_hunter @ 6.11.2004, 22:41)

не получится ( у него запрос для этого слишком длинный )
Опс! Я когда это писал, не посмотрел, что есть вторая страница smile

Тогда, как вариант, можно разбить строку так:
Код
IdHTTP1.Get(
'http://www.server.ru/phpBB2/profile.php?username=Zlo-2'+
'&[email protected]' +
'&new_password=123' +
...);

Добавлено @ 23:18
А лучше делай Post, как уже написали...

Автор: Zlo 7.11.2004, 00:35
_hunter
в запросе параметры перечисляится через '&' тогда писать наверное нада так:
Код

var s : TStringList;
     buffer: TStream;    
begin
 s := TStringList.Create;
 s.Add('username=Zlo-2');
 s.Add('&[email protected]');
 s.Add('&new_password=123');
.. и т.д.
 buffer = TMemoryStream.Create();
 IdHTTP1.Post ('http://www.server.ru/phpBB2/profile.php', s, buffer);
 buffer.Free();
 s.Free;
end;

что скажешь? я прав?

И еще какнибудь можно посмотреть хтмл страницу после пост запроса в Memo?
А то если написать вот так:
Код

Memo3.Lines.Text:=idHTTP1.Post('http://www.server.ru/phpBB2/profile.php',s, buffer);

Дельфя выдает ошибку что типы несовместимы smile

_hunter
Попробавал сделать как ты предложил, все таже фигня smile
Только теперь это идет как исключительная ситуация

Если нужен текст сообщения об ошибке то могу написать.

Автор: p0s0l 7.11.2004, 19:06
Цитата(Zlo @ 7.11.2004, 00:35)

что скажешь? я прав?
Символы & автоматом ставятся... Вручную ставить не надо...

Автор: p0s0l 7.11.2004, 19:42
Цитата(Zlo @ 7.11.2004, 00:35)

А то если написать вот так:


Цитата(Zlo @ 7.11.2004, 00:35)

Дельфя выдает ошибку что типы несовместимы

Сделай так:
Код
Memo3.Lines.Text:=idHTTP1.Post('http://www.server.ru/phpBB2/profile.php',s);


Тебе надо разобраться, что такое перегрузка функций, чтобы не путаться...

Автор: Zlo 8.11.2004, 03:41
p0s0l
Сделал как сказал.
Ошибка с типами пропала smile

но всеравно когда начинается выполнение функции POST программа вылетает с ошибкой.

Автор: p0s0l 8.11.2004, 10:57
Какая ошибка ?

Автор: Zlo 8.11.2004, 14:43
p0s0l
Вот это выдает если запускать не из под делфи ИДЕ:

HTTP/1.1 302 Found.

А вот это если из под делфи:

Project Project1.exe raised exception class EidHTTPPritocolException with message 'HTTP/1.1 302 Found'. Process
stopped.


Вобщемто одно и тоже.

Автор: p0s0l 9.11.2004, 00:25
Шо за ошибка такая ? smile
Вроде типа редиректа, я так понял...
Ты можешь дать полный урл к этой странице ?
Или показать всё содержимое Memo1 (куда ты пишешь ответ с сервера)... Должен быть указан новый URL - его и надо юзать будет...

Но в IdHTTP встроена поддержка редиректов, попробуй поставить свойство HandleRedirects в True (по умолчанию False), и RedirectMaximum поставь хотя бы 1 (по умолчанию стоит 15, так что если не трогал - то не трожь smile)

Автор: Zlo 9.11.2004, 00:36
p0s0l
Урл?
вот держи
http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true

Но вроде редиректа нет.
А в меме нечего не записывается, он пустой остается, и ошбка вылезает

Автор: p0s0l 9.11.2004, 07:25
Цитата(Zlo @ 9.11.2004, 00:36)
p0s0l
Урл?
вот держи
http://www.nef.ru/phpBB2/profile.php?mode=...ter&agreed=true
У меня такое нормально рабоатет smile, без ошибок, страница получается нормально... Странно...
Код
 memo1.text := idhttp1.Get('http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true');



Цитата(Zlo @ 9.11.2004, 00:36)
А в меме нечего не записывается, он пустой остается, и ошбка вылезает
Надо заключить IdHTTP1.Get в блок try..except (и использовать вариант вызова, где ответ идёт в поток), также попробуй вывести что после .Get содержится в IdHTTP1.ResponseText...

Автор: Zlo 9.11.2004, 11:35
p0s0l
извени меня конечно за возможно тупые вопросы но как это сделать:

Цитата(p0s0l @ 9.11.2004, 07:25)
Надо заключить IdHTTP1.Get в блок try..except (и использовать вариант вызова, где ответ идёт в поток)

???

Автор: _hunter 9.11.2004, 14:06
ух ты сколько тут наотвечали...
что-то уведомление об ответе глючит.

Цитата

то если написать вот так:
Код
Memo3.Lines.Text:=idHTTP1.Post('http://www.server.ru/phpBB2/profile.php',s, buffer);

Дельфя выдает ошибку что типы несовместимы


та и должно быть smile ( а ответ хранится в buffer )
и перегнат его в тот же StringList можно методом TStrings LoadFromStream()

Цитата
извени меня конечно за возможно тупые вопросы но как это сделать


делается это так:
Код

try
IdHTTP1.Post ('http://www.server.ru/phpBB2/profile.php', s, buffer);
finally
end;

finally пустой потому как в принципе всю обработку можно делать с помощью ResponseCode

Автор: p0s0l 9.11.2004, 14:43
Всё-таки, дай ту ссылку, которая глючит, а не эту:
http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true
smile

Чтобы получше разобраться с ошибкой, делай так:
Код
var
 url : string;
 rs : TMemoryStream;
 s : string;
begin
 URL := 'http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true';
 rs := TMemoryStream.Create;
 try
   IdHTTP1.Get(URL, rs);
 except
 end;
 Memo1.Text := PChar(rs.Memory);
 Memo1.Lines.Add('----');
 Memo1.Lines.Add(IntToStr(IdHTTP1.ResponseCode));
 Memo1.Lines.Add(IdHTTP1.ResponseText);
 IdHTTP1.Response.ContentStream.Position := 0;
 SetLength (s, IdHTTP1.Response.ContentLength);
 IdHTTP1.Response.ContentStream.Read(s[1], Length(s));
 Memo1.Lines.Add(s);
 rs.Free;
end;
(тут много лишнего, но на всякий случай smile)


Добавлено @ 14:50
Цитата
делается это так:
Если у него Exception (а так оно получается), то надо try..except, а не try..finally

Автор: p0s0l 9.11.2004, 14:54
ЗЫ:
классификация хттп-ошибок:
Цитата
1ХХ - Информационное.Запрос принят, процесс продолжается.
2ХХ - Успех.Сообщение было успешно принято.
3ХХ - Перенаправление. Для завершения запроса необходимо произвести ряд действий.
4ХХ - Ошибка клиента. Запрос содержит синтаксическую ошибку и не может быть удовлетворен.
5ХХ - Ошибка сервера. Сервер не может выполнить внешний корректный запрос.


Цитата
HTTP Error 302 - Moved temporarily
Introduction


Your Web server thinks that your URL has been temporarily redirected to another URL. The client system is expected to immediately retry the alternate URL.

302 errors in the HTTP cycle

Any client (e.g. your Web browser or our CheckUpDown robot) goes through the following cycle when it communicates with your Web server:
* Obtain an IP address from the IP name of your site (your site URL without the leading 'http://'). This lookup (conversion of IP name to IP address) is provided by domain name servers (DNSs).
* Open an IP socket connection to that IP address.
* Write an HTTP data stream through that socket.
* Receive an HTTP data stream back from your Web server in response. This data stream contains status codes whose values are determined by the HTTP protocol. Parse this data stream for status codes and other useful information.

This error occurs in the final step above when the client receives an HTTP status code that it recognises as '302'.

Resolving 302 errors - general

The 302 response from your Web server should always include an alternative URL to which redirection should occur. If it does, a Web browser will immediately retry the alternative URL. So you never actually see a 302 error in a Web browser, unless perhaps you have a corrupt redirection chain e.g. URL A redirects to URL B which in turn redirects back to URL A. If your client is not a Web browser, it should behave in the same way as a Web browser i.e. immediately retry the alternative URL.

If the Web server does not return an alternative URL with the 302 response, then either the Web server sofware itself is defective or your Webmaster has not set up the URL redirection correctly.


Автор: Zlo 9.11.2004, 18:32
p0s0l
Сылка которую я дал

http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true

это ссылка на форму которую нужно передать скрипту
передается форма методом пост
передается скрипту

http://www.nef.ru/phpBB2/profile.php

Кстати когда я разрешил редирект то ошибка пропала smile
Но чего-то всеравно неудается провести регистрацию smile
Я щас посмотрю может чего с параметрами напутал

Автор: Guest 9.11.2004, 19:33
Ну теперь другая проблема! smile
Пост посылается но некакой регитрации не происходит smile
Просто перекидывает на главную страницу и фсе
Чего за чертовщина?

Автор: p0s0l 9.11.2004, 20:33
К сожалению, в PHP я не особо шарю, но, насколько я знаю, есть такое понятие "сессия". И в параметрах запроса нужно указывать ID текущей сессии. Если ты там пишешь ID какой-то старой сессии (например, списал запрос, который твой IE посылает серверу, и вручную потом этот запрос 1:1 посылаешь), то у тебя будет облом...
Т.е. по-нормальному, надо:
1) зайти, на страницу регистрации (сделать IdHTTP1.Get('http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true')
2) в результате получишь SID (его можно получить из html, который получаешь с помощью IdHTTP1.Get)
Можешь получить его так:
Ищешь подстроку: <form action="profile.php?
Далее после неё сразу же идёт типа такого:
sid=38ed0bbb49f900a798524b211055a1fb" method="post">
Отсюда SID получай...
3) Теперь уже посылай запрос с заполненной формой и с указанием в параметрах этого SID'а

Автор: Zlo 9.11.2004, 22:13
Спасибо про ид я знаю! smile

Посмотри программу Mini-Browser очень классная вещь, скачать можно на web-hack.ru (это не реклама просто ссылку на файл не могу дать smile )
позволяет смотреть каким методом и куда посылыются данные

Вот эта прога и показывает мне
вот такой адрес
куды посылать данные
http://www.nef.ru/phpBB2/profile.php?sid=39bd917c94850c2dfb4a13d7b99e574d
я пишу в проге так
Memo3.Lines.Text:=idHTTP1.Post('http://www.nef.ru/phpBB2/profile.php?sid='+sid,s);
sid - я его доэтого выкарчевываю из страници
и всеравно некакой регистрации не происходит smile((
просто перекидывает на главную страницу
вот немогу понять, че такое???

Автор: p0s0l 10.11.2004, 00:13
Вот так всё работает...
Код
procedure TForm1.Button1Click(Sender: TObject);
const
 tofind = '<form action="profile.php?sid=';

var
 s, sid, url : string;
 p : integer;
 sl : TStringList;
begin
 Memo1.Text := IdHTTP1.Get('http://www.nef.ru/phpBB2/profile.php?mode=register&agreed=true');

 s := AnsiLowerCase(Memo1.Text);
 Delete (s, 1, Pos(tofind, s) + Length(tofind)-1);
 sid := copy(s, 1, pos('"', s)-1);

 url := 'http://www.nef.ru/phpBB2/profile.php?sid=' + sid;
 sl := TStringList.Create;
 sl.Add('username=Posol5');
 sl.Add('[email protected]');
 sl.Add('new_password=abcdefg45');
 sl.Add('password_confirm=abcdefg45');
 sl.Add('icq=');
 sl.Add('aim=');
 sl.Add('msn=');
 sl.Add('yim=');
 sl.Add('website=');
 sl.Add('location=');
 sl.Add('occupation=');
 sl.Add('interests=');
 sl.Add('signature=Подпись');
 sl.Add('viewemail=0');
 sl.Add('hideonline=0');
 sl.Add('notifyreply=0');
 sl.Add('notifypm=1');
 sl.Add('popup_pm=1');
 sl.Add('attachsig=1');
 sl.Add('allowbbcode=1');
 sl.Add('allowhtml=0');
 sl.Add('allowsmilies=1');
 sl.Add('language=russian');
 sl.Add('style=subSilver');
 sl.Add('timezone=3');
 sl.Add('datefromat=D M d, Y g:i a');
 sl.Add('mode=register');
 sl.Add('agreed=true');
 sl.Add('coppa=0');
 sl.Add('submit=submit');
 Memo2.Text := IdHTTP1.Post(url, sl);
 sl.Free;
 memo2.Lines.savetofile('c:\111.html');
end;

Автор: Zlo 10.11.2004, 02:52
p0s0l
Скланяю голову!
Респект тебе и все такое.
Я понял в чем ошибка, спасибо тебе p0s0l!!!!

Автор: p0s0l 10.11.2004, 12:18
Цитата(Zlo @ 10.11.2004, 02:52)
Я понял в чем ошибка,
И в чём она была ? Мне ведь интересно smile

Автор: _hunter 10.11.2004, 15:15
скорее всего в этом:
Цитата
sid - я его доэтого выкарчевываю из страници

и непонимании этого:
Цитата
И в параметрах запроса нужно указывать ID текущей сессии. Если ты там пишешь ID какой-то старой сессии (например, списал запрос, который твой IE посылает серверу, и вручную потом этот запрос 1:1 посылаешь), то у тебя будет облом...

Автор: Zlo 10.11.2004, 18:05
_hunter

Цитата(_hunter @ 10.11.2004, 15:15)
скорее всего в этом:
Цитата
sid - я его доэтого выкарчевываю из страници

и непонимании этого:
Цитата
И в параметрах запроса нужно указывать ID текущей сессии. Если ты там пишешь ID какой-то старой сессии (например, списал запрос, который твой IE посылает серверу, и вручную потом этот запрос 1:1 посылаешь), то у тебя будет облом...


нет не в этом, про сид я знал ссамого начала как прогу начал делать!

недоглядел я с параметрами немнжко smile
и со значением параметров smile


p0s0l
вот так помоему писать нельзя
Код

sl.Add('signature=Подпись');


Потому как русские буквы должны преобразовываться в какойто там вид....smile
Вот в 6 дельфи для этого был компонент NMURL с закладки FastNet
может в 7 версии найдется замена?

Автор: p0s0l 10.11.2004, 19:15
Можно так:
Код
Uses IdURI;
...
sl.Add ('signature=' + TIdURI.ParamsEncode('Подпись'));



Автор: _hunter 11.11.2004, 11:31
куда-то перекодируется...
ты приведи тлгда пример оригинальной подписи ( чтоб определить куда оно кодируется )
( есть подозрение что в Base64 -- тогда тот же Indy ( а именно IdBase64Encoder ) поможет )

Автор: fuckerok 15.11.2004, 08:54
Люди у меня такая пробелма не хочет форму посылать на сервер в интернете ошибку выдаёт smile
я вот хочу делать так
Код

........
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to 20 do
begin
Memo1.Text :=   IdHTTP1.get ('http://oldchat.mail.ru/start.html?nick=test'+IntToStr(i)+'&color=#000000&textcolor=#000000&channel=13-18&tema=');
 sleep(3000);
end;
end;
.........

И мне ошибку выдаёт.
И в HTTPLOG никаких обращений
А если делаю для локального сервера, то всё работает
Вот например
Код

...........
Memo1.Text :=   IdHTTP1.get ('http://localhost/form.php?nick=test'+IntToStr(i)+'&color=#000000&textcolor=#000000&channel=13-18&tema=');
.......

В этом случае всё работает, прожек посылает 20 запросов серверу (видно по http логам)
Помогите разобраться. В чём проблема? smile

Автор: p0s0l 15.11.2004, 17:08
Цитата(fuckerok @ 15.11.2004, 08:54)
И мне ошибку выдаёт.
Какую ошибку ?
Цитата
'+i+'&
Надо вместо i писать IntToStr(i)...

PS: и у меня нормально твой запрос на oldchat.mail.ru отправился...
Правда написали, что доступ для моего IP закрыт из-за флуда smile

Автор: fuckerok 16.11.2004, 07:24
p0s0l
Сам не пойму была ошибка, запрсов не было smile
Наверно руки кривые smile
Единственное, что отлечалось у меня был другой провайдер, я тестировал на PTN. Сейчас у меня обычный провайдер и всё работает, никаких ошибок.
Цитата
Надо вместо i писать IntToStr(i)...

Это я от руки добросал, ошибка точно не из-за этого была, в коде у меня правильно написанно, да и не скомпилилось бы она так, как я вначале написал.
Цитата
Правда написали, что доступ для моего IP закрыт из-за флуда

Надеюсь ты не обидишся на меня за то что не сможешь какое-то время посидеть в детском чате smile , ну если тебе невтерпёж, то я могу написать как блоки обойти smile хотя ты и сам лудше меня знаешь как это делаеться smile

Автор: Kondragor 21.11.2004, 03:14
Поскажите плиз и мне тоже. Вот такой запрос - https://loginnet.passport.com/ppsecure/post.srf?lc=1033&id=2&tw=20&fs=1&cbid=24325&da=passport.com&kpp=2&svc=mail&msppjph=1&login=my_mail&domain=hotmail.com&passwd=my_password&sec=&mspp_shared=&padding=x позволяет через браузер зайти сразу на страничку проверки почты. А как мне сделать это через IdHTTP1 ? тем более когда я обращаюсь к нему так
Код

procedure TForm1.Button1Click(Sender: TObject);  
var s : TStringList;
     buffer: TStream;
begin
 s := TStringList.Create;
 s.Add('login=my_mail');
 s.Add('domain=hotmail.com');
 s.Add('passwd=my_password');
 s.Add('sec=');
 s.Add('mspp_shared=');
 s.Add('padding=x');
 buffer:= TMemoryStream.Create();
 IdHTTP1.Post('https://loginnet.passport.com/ppsecure/post.srf?lc=1033&id=2&tw=20&fs=1&cbid=24325&da=passport.com&kpp=2&svc=mail&msppjph=1', s, buffer);
 buffer.Free();
 s.Free;
end;

выдается ошибка Intercept value is not valid. Делаю место https:// - http://. Пишет 403 Forbidden.
Подскажите плиз как можно таким образом залогиниться на почту.

p.s. сорри если ступил где, я с этими вещами первый раз работаю.

Автор: _hunter 21.11.2004, 22:55
Цитата
Assign an instance of TIdConnectionInterceptOpenSSL to the Intercept property to allow use of the HTTPS protocol. For the Windows platform, you must install the Indy OpenSSL support .DLL's available at http://www.intelicom.si  to enable Secure Socket Layer support.

Автор: Kondragor 22.11.2004, 01:10
А нельзя ли объяснить что с этим делать? smile желательно на небольшом примере smile

Автор: Балбес 15.5.2005, 11:37
скомпилировал этот пример
Цитата

var s : TStringList;
      buffer: TStream;     
begin
  s := TStringList.Create;
  s.Add('username=Zlo-2');
  s.Add('[email protected]');
  s.Add('new_password=123');
.. и т.д.
  buffer = TMemoryStream.Create();
  IdHTTP1.Post ('http://www.server.ru/phpBB2/profile.php', s, buffer);
  buffer.Free();
  s.Free;
end;


Сообщение отправляется, но вылазит ошибка
Цитата
Socket Error # 10061
Connection refused


Как ее обойти, скажите smile

Автор: Балбес 16.5.2005, 11:59
адрес сменил на свой, сообщение отправляется, но вылазит ошибка

Автор: _hunter 16.5.2005, 12:32
а ты уверен что на этом www.server.ru ждут твоего сообщения?

Автор: Балбес 16.5.2005, 19:57
_hunter
Цитата
адрес сменил на свой, сообщение отправляется, но вылазит ошибка


Цитата
Socket Error # 10061
Connection refused

smile

Автор: _hunter 16.5.2005, 20:04
ну тогда ты уверен что на "своем" адресе твое сообщение ждут?
+ поставь сниффер да глянь что/куда идет ( и идет ли )[s]
++ что значит сообщение отправляется? ( когда, в таком случае ошиька появляется? )

Автор: lamos123456 5.11.2006, 14:08
Вот попробовал написать по вашему примеру авторизацию но выдаёт ошибку в коде 
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  tofind = '<!-- saved from url=(0081)http://192.168.10.49:8080/loginout.php?PHPSESSID=';
var
  s, sid, url : string;
  p : integer;
  sl : TStringList;
begin
  Memo1.Text := IdHTTP1.Get('http://192.168.10.49:8080/loginout.php');
  s := AnsiLowerCase(Memo1.Text);
  Delete (s, 1, Pos(tofind, s) + Length(tofind)-1);
  sid := copy(s, 1, pos('"', s)-1);
  url := 'http://192.168.10.49:8080/profile.php?action=submit&PHPSESSID=' + sid;
  sl := TStringList.Create;
    s := TStringList.Create;
  s.Add('action=login');
  s.Add('imembername='+(edit1.Text));
  s.Add('ipassword='+(edit2.Text));
  s.Add('submit=%C2%F5%EE%E4');
  Memo2.Text := IdHTTP1.Post(url, sl);
  sl.Free;
  memo2.Lines.savetofile('c:\111.html');
end;
end.

Вот Post запрос который выцепил снифер 
Код

POST http://192.168.10.49:8080/loginout.php HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ssf, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://192.168.10.49:8080/loginout.php
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)
Host: 192.168.10.49:8080
Content-Length: 63
Pragma: no-cache
Cookie: lastvisit=1162718715; PHPSESSID=92b6d91cc2def412f5ed64d78181c670

action=login&imembername=asdf&ipassword=adf&submit=%C2%F5%EE%E4



Форум ExBB

Автор: Matematik 5.11.2006, 16:39
Обрати внимаение на код
Код

var s:String;
  s.Add('action=login');
  s.Add('imembername='+(edit1.Text));
  s.Add('ipassword='+(edit2.Text));
  s.Add('submit=%C2%F5%EE%E4');
  Memo2.Text := IdHTTP1.Post(url, sl);

Автор: Zlo 6.11.2006, 02:28
lamos123456, переменную s объяви как TStringList

Автор: lamos123456 6.11.2006, 12:42
Ok... спасибо!

Автор: malor 24.4.2007, 12:04
Мне нужно отправить пару строчек методом POST, а затем прочитать ответ от сервака:
Код
 Query := TStringList.Create;
Query.Append('VP=1');
Query.Append('AC='+Trim(mbNomer.Text));

ResultQuery := HTTP.Post('https://192.168.0.100/check/index.cgi', Query);
lbOtvet.Caption:= ResultQuery;
При запуске выдает - 
Цитата
Debugger Exception Notification

Progect Fel.exe raised exception class EIdOHandlerPropInvalid with message 'IOHandler value is not valid'.
Process stopped. Use step or Run to continue.

Пошаговая отладка показывает, что сбой происходит на строке ResultQuery := HTTP.Post('https://192.168.0.100/check/index.cgi', Query);
Что делать ?
Где логи смотреть ?..

Delphi 7, WinXP

Автор: aktuba 24.4.2007, 12:35
Цитата

Assign an instance of TIdConnectionInterceptOpenSSL to the Intercept property to allow use of the HTTPS protocol. For the Windows platform, you must install the Indy OpenSSL support .DLL's available at http://www.intelicom.si  to enable Secure Socket Layer support.


что означает, что для работы с HTTPS необходимы дополнительные DLL. Читаем справку + пользуемся поиском. Обсуждалось подобное очень много раз...

Автор: Gwire 1.7.2008, 19:10

Здравствуйте.
У меня утановлен Apache2.0. Файл по адресу http://localhost/index.php содержит следуюший код:
Код

<?php
    echo 'GET = ';
    var_dump($_GET);    // Вывод массива $_GET - то-есть все переменные переданные методом GET.
    echo 'POST = ';
    var_dump($_POST);   // Вывод массива $_POST - все переменные переданные методом POST.
?>


В Delphi6 пишу код:
Код

procedure TForm1.Button1Click(Sender: TObject);
var S: TStringList;
    A: TStringStream;
    P, G: String;
begin
    P:= 'var_post=value_post';      // Данные для передачи POST методом
    G:= 'var_get=value_get';        // Данные для передачи GET методом

    S:= TStringList.Create;         
    A:= TStringStream.Create('');

    S.Add( P );
    IdHTTP1.Post('http://localhost/?'+ G, S, A);

    Memo1.Lines.Text:= A.DataString;
end;


В результате в Memo1 заносятся следуюшие данные
Код

GET = array(1) {
  ["var_get"]=>
  string(9) "value_get"
}
POST = array(0) {
}


Как видно POST-данные небыли получены сервером для обработки.
Из этого следует что либо пременная "S" имеет не правильный формат строк (var_post=value_post), 
либо функция "IdHTTP1.Post()" работает некорректно, либо я затрудняюсь прокоментировать этот "баг".
smile
Хотелось-бы разобраться...

Автор: Gwire 1.7.2008, 19:48

Розобрался.
Код

IdHTTP1.Request.ContentType:= 'application/x-www-form-urlencoded';  // Нужно добавить.
IdHTTP1.Post('http://localhost/?'+ G, S, A);


Автор: Sharky 30.1.2009, 17:47
Здравствуйте у меня такая проблема не могу сделать запрос на Https 
вот код страницы 

Код



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r" />
<title>.: мЙЮОЩК лБВЙОЕФ рПМШЪПЧБФЕМС уРБТЛ</title>
<link rel="stylesheet" type="text/css" href="/main_ru.css" />
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" href="/ie6.css" />
<![endif]-->
</head>
<body>

<h1 class="hide">мЙЮОЩК лБВЙОЕФ рПМШЪПЧБФЕМС</h1>
<form id="loginForm" action='/?lang=ru' method=post>
    <p>мПЗЙО&nbsp;<input type="text" name="login" /></p>
    <p>рБТПМШ&nbsp;<input type="password" name="password" /></p>

    <button type="submit"><img class="hide" src="/img_ru/lkAuthBtn.png" alt="чПКФЙ" /></button>
    <div id="loginShade"></div>
</form>

<div class="sparkenish" id="sparkenish">
    <div id="sparkenishBalloon">
        <img id="sparkenishBalloonLTC" src="/img_ru/lkSparkenishBalloonLTC.png" />
        <img id="sparkenishBalloonRTC" src="/img_ru/lkSparkenishBalloonRTC.png" />
        <img id="sparkenishBalloonLBC" src="/img_ru/lkSparkenishBalloonLBC.png" />
        <img id="sparkenishBalloonRBC" src="/img_ru/lkSparkenishBalloonRBC.png" />
        <img id="sparkenishBalloonArrow" src="/img_ru/lkSparkenishBalloonArrow.png" />
        <a id="sparkenishBalloonClose" href="#"><img src="/img_ru/lkSparkenishBalloonClose.png" alt="ЪБЛТЩФШ РПНПЭОЙЛБ" /></a>
                <p>
                              дПВТП РПЦБМПЧБФШ Ч МЙЮОЩК ЛБВЙОЕФ! <br>
                 </p>
        
    </div>
    <div id="sparkenishImgCont"><img id="sparkenishImg" src="/img_ru/lkSparkenish.png" alt="рПНПЭОЙЛ УРБТЛ" /></div>
</div>

<script language="javascript" src="/script.js"></script>

</body>
</html>

отсюда для себя я вынул след информацию:
    запрс будет сделан с помощью Post запроса 
    "text" name="login" поле логина
    "password" name="password" поле пароля 
    action='/?lang=ru


вот как я пытаюсь сделать запрос 

Код

procedure TForm1.Button1Click(Sender: TObject);
var
 tL: TStringList; 
 s: String;
  begin
   tL := TStringList.Create;
   tL.Add('text=E_103095');
   tL.Add('password=mcsarky');
   form1.IdHTTP1.Request.Referer:='https://stat.spark-com.ru/';
    try
     s := IdHTTP1.Post('https://stat.spark-com.ru/?lang=ru',tL);
    finally
     tL.Free;
    end;
  memo1.Lines.Add(s);
  end;

мой аутпост говорит что приложение запрашивает исходящее соединение LocalHost
далее моё приложение просто виснет 
несколько сообщений выше я видел что для Https нужны какие то Dll ки  но я не знаю откуда мне их взять в гугле смотрел . 
Не представляю что мне делать.помогите мне пожалуйста . 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)