Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.008 c
2-1214447178
AlexAA
2008-06-26 06:26
2008.07.27
Как отправить письмо по электронной почте?


2-1214592890
Res
2008-06-27 22:54
2008.07.27
Recv


15-1212718745
brother
2008-06-06 06:19
2008.07.27
посоветуйте монитор...


15-1213008836
андр.
2008-06-09 14:53
2008.07.27
Interface


15-1212514820
olevacho_
2008-06-03 21:40
2008.07.27
инструменты создания отчетов для полиграфии





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский