![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
POST запрос с помощью ShellExecute...
botaniQ © (2007-09-26 11:21:00)Собственно сабж...
Как бы мне отправить запрос на сервер и перейти на полученную страницу (не получить ответ от сервера), а просто перейти с помощью стандартного браузера???
Кто подскажет???
botaniQ (2007-09-28 13:07:00) [1]Всем спасибо за обсуждение....пришлось действовать так:
Я на промежуточный скрипт отправляю GET типа http://www.site.ru/auth.php?login=...&password=...и там уже работает так:
if (!empty($_GET[login]))
{
$login=$_GET[login];
$password=$_GET[password];
$url=$_GET[url];
?>
umbra (2007-09-27 16:30:00) [2]
> А перейти я имел ввиду - открыть в стандартном браузере!
получайте страницу в TIdHTTP и передавайте веббраузеру (если это Интернет эксплорер)
procedure TForm1.Button1Click(Sender: TObject);
var
mypage: string;
stream: IStream;
mycount: Integer;
wb: IDispatch;
persStream: IPersistStreamInit;
newpos: int64;
begin
WebBrowser1.Navigate('about:blank');
mypage := IdHTTP1.Get(' http://www.delphimaster.ru');
if Succeeded(CreateStreamOnHGlobal(0, true, stream)) then
if Succeeded(stream.Write(PChar(mypage), Length(mypage) + 1, @mycount)) then
begin
stream.Seek(0, STREAM_SEEK_SET, newpos);
wb := WebBrowser1.Document;
if Succeeded(wb.QueryInterface(IID_IPersistStreamInit, persStream)) then
begin
if Succeeded(persStream.InitNew) then
persStream.Load(stream);
persStream._Release;
end;
end;
end;
DiamondShark (2007-09-27 14:09:00) [3]
> Anatoly Podgoretsky © (27.09.07 13:43) [14]
Конечно, всё от конкретного сайта зависит.
Автору бы следовало не полениться, а получить полный лог HTTP запросов и ответов, которые проходят при достижении нужной цели в браузере.
А потом уже можно было бы решать, какие из шагов можно сымитировать, и что где браузеру подсунуть.
Anatoly Podgoretsky (2007-09-27 13:43:00) [4]> DiamondShark (27.09.2007 13:32:13) [13]
В ответ на POST посылается страница, так же как и на GET - отличаются они методом передачи параметров на сервер.
Сомневаюсь что ее удастся подсунуть браузеру по умолчанию
DiamondShark (2007-09-27 13:32:00) [5]
> А перейти я имел ввиду - открыть в стандартном браузере!
Разбирай ответ на POST, устанавливай куки функцией InternetSetCookie, потом открывай в стандартном браузере тот URL, на который тебя послали в ответ на POST.
Это если стандартный браузер -- IE. Для другого придётся искать, как ему подсунуть нужные куки.
botaniQ (2007-09-27 13:27:00) [6]Вот в auth.php создается сессия которая и обеспечивает переход на аккаунт страницу данного пользователя (user.php)...
> DVM © (27.09.07 12:32) [10]
> ...
> Что значит перейти?
> ...
А перейти я имел ввиду - открыть в стандартном браузере!
botaniQ (2007-09-27 13:22:00) [7]IdHTTP понимает редиректы, но дело не в них...
предположим вот кусочек кода:
---------------------------------------
POST.Valuer['login']:='login';
POST.Valuer['password']:='password';
S:=IdHTTP.POST ('www.aaaa.ru/auth.php', POST);
---------------------------------------
в auth.php происходит редирект на user.php...
А что дальше то мне делать? Как попасть на эту аккаунт-страницу типа www.aaaa.ru/user.php, Как открыть ее в IE??
DVM (2007-09-27 12:32:00) [8]
> а мне нужно перейти непосредственно на аккаунт-страницу
> - как я понял IdHTTP этого не может обеспечить...
Что значит перейти? Переход каким макаром осуществляется? Редиректом что ли? Так TIdHTTP вроде как редирект понимает.
botaniQ (2007-09-27 12:26:00) [9]
> DVM © (26.09.07 13:59) [8]
>
> > А что бы перейти на страницу мне надо сначала перейти
> на
> > скрипт авторизации, куда передать ПОСТом логин, пароль
> и
> > страницу навигации (куда перейти после авторизации)...
> .
>
> а почему бы это все через TIdHTTP не сделать. Там тебе
> и пост и жет и все остальное будет.
Да будет то будет (я так сначала и делал) но вот IdHTTP возвращает мне код страницы - а мне нужно перейти непосредственно на аккаунт-страницу - как я понял IdHTTP этого не может обеспечить...
DVM (2007-09-26 13:59:00) [10]
> А что бы перейти на страницу мне надо сначала перейти на
> скрипт авторизации, куда передать ПОСТом логин, пароль и
> страницу навигации (куда перейти после авторизации)....
а почему бы это все через TIdHTTP не сделать. Там тебе и пост и жет и все остальное будет.
botaniQ (2007-09-26 12:00:00) [11]Я думал можно как то типо так:
post:='POST http://localhost/HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Accept-Language: ru
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 5.0; .NET CLR 1.0.3705)
Host: localhost
Proxy-Connection: Keep-Alive
param1=1¶m2=2';
ShellExecute (0, 'open', PChar(' http://www.site.ru/auth.php'+post), nil, nil, SW_SHOW);
Или типа того - но вроде как так не полуцца...
botaniQ (2007-09-26 11:57:00) [12]Задача такова - в программе происходит авторизация с помощью IdHTTP - далее появляется мое окошко скажем с кнопочкой "мои сообщения" - после нажатия этой кнопочки мне надо перейти на web-страницу (с сообщениями для определенного пользователя)...А что бы перейти на страницу мне надо сначала перейти на скрипт авторизации, куда передать ПОСТом логин, пароль и страницу навигации (куда перейти после авторизации)....
DiamondShark (2007-09-26 11:52:00) [13]
> Но в том же Mail.ru Agent'е это как то срабатывает
Какое "это"? POST запрос с помощью ShellExecute? Это нигде не срабатывает.
У тебя задача верхнего уровня какая?
botaniQ (2007-09-26 11:25:00) [14]
>
> DVM © (26.09.07 11:23) [2]
> но именно POST запрос сделать не получится, только GET
Эх...жалко....Но в том же Mail.ru Agent'е это как то срабатывает
botaniQ (2007-09-26 11:24:00) [15]Да запустить не сложно например так
ShellExecute (0, 'open', PChar(' http://www.site.ru/auth.php'), nil, nil, SW_SHOW);
А вот как при этом передать POST-запрос например с логином и паролем??
DVM (2007-09-26 11:23:00) [16]запустить iexplore.exe c url в качестве параметра?
DVM (2007-09-26 11:23:00) [17]но именно POST запрос сделать не получится, только GET