Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.27;
Скачать: CL | DM;

Вниз

POST запрос с помощью ShellExecute...   Найти похожие ветки 

 
botaniQ   (2007-09-26 11:21) [0]

Собственно сабж...
Как бы мне отправить запрос на сервер и перейти на полученную страницу (не получить ответ от сервера), а просто перейти с помощью стандартного браузера???
Кто подскажет???


 
DVM ©   (2007-09-26 11:23) [1]

запустить iexplore.exe c url в качестве параметра?


 
DVM ©   (2007-09-26 11:23) [2]

но именно POST запрос сделать не получится, только GET


 
botaniQ   (2007-09-26 11:24) [3]

Да запустить не сложно например так
ShellExecute (0, "open", PChar("http://www.site.ru/auth.php"), nil, nil, SW_SHOW);
А вот как при этом передать POST-запрос например с логином и паролем??


 
botaniQ   (2007-09-26 11:25) [4]


>
> DVM ©   (26.09.07 11:23) [2]
> но именно POST запрос сделать не получится, только GET


Эх...жалко....Но в том же Mail.ru Agent"е это как то срабатывает


 
DiamondShark ©   (2007-09-26 11:52) [5]


> Но в том же Mail.ru Agent"е это как то срабатывает

Какое "это"? POST запрос с помощью ShellExecute? Это нигде не срабатывает.

У тебя задача верхнего уровня какая?


 
botaniQ   (2007-09-26 11:57) [6]

Задача такова - в программе происходит авторизация с помощью IdHTTP - далее появляется мое окошко скажем с кнопочкой "мои сообщения" - после нажатия этой кнопочки мне надо перейти на web-страницу (с сообщениями для определенного пользователя)...А что бы перейти на страницу мне надо сначала перейти на скрипт авторизации, куда передать ПОСТом логин, пароль и страницу навигации (куда перейти после авторизации)....


 
botaniQ   (2007-09-26 12:00) [7]

Я думал можно как то типо так:

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&param2=2";
ShellExecute (0, "open", PChar("http://www.site.ru/auth.php"+post), nil, nil, SW_SHOW);

Или типа того - но вроде как так не полуцца...


 
DVM ©   (2007-09-26 13:59) [8]


> А что бы перейти на страницу мне надо сначала перейти на
> скрипт авторизации, куда передать ПОСТом логин, пароль и
> страницу навигации (куда перейти после авторизации)....

а почему бы это все через TIdHTTP  не сделать. Там тебе и пост и жет и все остальное будет.


 
botaniQ   (2007-09-27 12:26) [9]


> DVM ©   (26.09.07 13:59) [8]
>
> > А что бы перейти на страницу мне надо сначала перейти
> на
> > скрипт авторизации, куда передать ПОСТом логин, пароль
> и
> > страницу навигации (куда перейти после авторизации)...
> .
>
> а почему бы это все через TIdHTTP  не сделать. Там тебе
> и пост и жет и все остальное будет.


Да будет то будет (я так сначала и делал) но вот IdHTTP возвращает мне код страницы - а мне нужно перейти непосредственно на аккаунт-страницу - как я понял IdHTTP этого не может обеспечить...


 
DVM ©   (2007-09-27 12:32) [10]


> а мне нужно перейти непосредственно на аккаунт-страницу
> - как я понял IdHTTP этого не может обеспечить...

Что значит перейти? Переход каким макаром осуществляется? Редиректом что ли? Так TIdHTTP вроде как редирект понимает.


 
botaniQ   (2007-09-27 13:22) [11]

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??


 
botaniQ   (2007-09-27 13:27) [12]

Вот в auth.php создается сессия которая и обеспечивает переход на аккаунт страницу данного пользователя (user.php)...


> DVM ©   (27.09.07 12:32) [10]
> ...
> Что значит перейти?
> ...


А перейти я имел ввиду - открыть в стандартном браузере!


 
DiamondShark ©   (2007-09-27 13:32) [13]


> А перейти я имел ввиду - открыть в стандартном браузере!

Разбирай ответ на POST, устанавливай куки функцией InternetSetCookie, потом открывай в стандартном браузере тот URL, на который тебя послали в ответ на POST.

Это если стандартный браузер -- IE. Для другого придётся искать, как ему подсунуть нужные куки.


 
Anatoly Podgoretsky ©   (2007-09-27 13:43) [14]

> DiamondShark  (27.09.2007 13:32:13)  [13]

В ответ на POST посылается страница, так же как и на GET - отличаются они методом передачи параметров на сервер.
Сомневаюсь что ее удастся подсунуть браузеру по умолчанию


 
DiamondShark ©   (2007-09-27 14:09) [15]


> Anatoly Podgoretsky ©   (27.09.07 13:43) [14]

Конечно, всё от конкретного сайта зависит.

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


 
umbra ©   (2007-09-27 16:30) [16]


> А перейти я имел ввиду - открыть в стандартном браузере!

получайте страницу в 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;


 
botaniQ   (2007-09-28 13:07) [17]

Всем спасибо за обсуждение....пришлось действовать так:
Я на промежуточный скрипт отправляю GET типа http://www.site.ru/auth.php?login=...&password=... и там уже работает так:
if (!empty($_GET[login]))
{
$login=$_GET[login];
$password=$_GET[password];
$url=$_GET[url];
?>
<form name=form action="http://www.site.ru/auth.php" method=post>
<input type="hidden" name="login" value="<? echo $login; ?>">
<input type="hidden" name="password" value="<? echo $password;?>">
<input type="hidden" name="url" value="<? echo $url; ?>">
<input type="hidden" name="ok" value="OK">
</form>
<script>document.forms["form"].submit();</script>
<?
}
:)



Страницы: 1 вся ветка

Текущий архив: 2008.07.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
2-1214419508
Igor23
2008-06-25 22:45
2008.07.27
CMD+ShellExecute


15-1213198540
тимохов
2008-06-11 19:35
2008.07.27
WinXP Home Ed + Корпоративная сеть + Прокси


15-1213271856
SKIPtr
2008-06-12 15:57
2008.07.27
подключение сети между виртуальными компьюторами


10-1148306525
atruhin
2006-05-22 18:02
2008.07.27
overload функции и IDispatch


2-1214314234
evgenij
2008-06-24 17:30
2008.07.27
MouseMove