Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передать POST в браузер, В IE или браузер по умолчанию 
:(
    Опции темы
Snowy
Дата 14.12.2005, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Возникла проблема. Необходимо открыть страницу в браузере (не в программе, а во внешнем).
Вроде просто:
Код

  ShellExecute(0,'open',pChar(URL),NIL,NIL,SW_SHOWNORMAL);

Но, необходимо передать не только URL, но и POST информацию.
Сейчас работает такой код:

Код

procedure PostUrl(const Login, Password, Domain: string);
var
  IE: TInternetExplorer;
  Fl: OleVariant;
  Post: OleVariant;
  Frame: OleVariant;
  Url: OleVariant;
  PostStr: string;
  P: Pointer;
begin
  IE := TInternetExplorer.Create(nil);
  IE.Connect;
  IE.Visible := True;
  Url := 'http://www.www.ru/html.html';
  Fl := Unassigned;
  Frame := '_blank';
  PostStr:='login='+Login+'&password='+Password;
  Post := VarArrayCreate([0, Length(PostStr) - 1], VT_I4);
  P := VarArrayLock(Post);
  try
    move(@PostStr[1], P, Length(PostStr));
  finally
    VarArrayUnlock(Post);
  end;
  try
    IE.Navigate2(Url, Fl, Frame, Post);
  finally
    IE.Free;
  end;
end;

Все бы ничего. Но иногда IE виснет намертво, вешая программу и Explorer.

Вопрос:
Есть ли альтернативные варианты? И желательно не только в IE, а в браузер по умолчанию.

У меня есть вариант: создать страницу с JavaScript, который будет делать переход.
Но эту страницу нельзя сохранять на диск.
Можно ли ее запихнуть сразу в браузер?
PM MAIL   Вверх
Демо
Дата 16.12.2005, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 3
Всего: 50



Цитата(Snowy @ 14.12.2005, 18:39)
Можно ли ее запихнуть сразу в браузер?


1. Самое простое - перейти по URL в формате "about: <здесь текст сраницы>", например:
Код

URL := 'about:<font color=red>Test</font>';
ShellExecute(0,'open',pChar(URL),NIL,NIL,SW_SHOWNORMAL);


2. Сформировать локально страницу и загрузить в браузер ее.




--------------------
    
PM MAIL ICQ Skype   Вверх
Romikgy
Дата 16.12.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Цитата(Snowy @ 14.12.2005, 17:39)
не только URL, но и POST информацию.
Имхо Post информация передается на сервер , а не в броузер .



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 16.12.2005, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(Romikgy @ 16.12.2005, 15:13)
Имхо Post информация передается на сервер , а не в броузер .

Естественно. Вопрос в том, как заставить браузер перейти на указанный урл и передать серверу эту информацию.
Для этого моя программа должна дать браузеру URL и POST информацию.
А вот как это сделать, чтобы IE не осыпался...
Добавлено @ 15:27
Цитата
Самое простое - перейти по URL в формате "about: <здесь текст сраницы>", например:

Вроде работает. В рантайме...
Если запускаю из Delphi, IE также сыпется по полной программе с завалом всего explorer.exe.
Вроде все заплаты стоят.
Ерунда какая-то.
Опера чисто все проглотила. А IE унес систему в далекую даль.
Пришлось ребутиться.
PM MAIL   Вверх
Snowy
Дата 16.12.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата
Самое простое - перейти по URL в формате "about: <здесь текст сраницы>", например:

За вариант спасибо.
Может и не пригодиться, но мысль интересная.
PM MAIL   Вверх
RA
Дата 18.12.2005, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Snowy Я вот твой пример пытаюсь посмотреть, не подскажешь что у тебя в USES ?
PM   Вверх
Snowy
Дата 18.12.2005, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(RAdmin @ 18.12.2005, 14:56)
Snowy Я вот твой пример пытаюсь посмотреть, не
подскажешь что у тебя в USES ?

Подскажу. И немножко код подкорректирую для универсальности.
Похожий мне не попадался, так что может пригодиться еще.

Код

uses Variants, ActiveX, SHDocVw;

procedure PostUrl(const URLStr, PostStr: string);
var
  IE: TInternetExplorer;
  Fl: OleVariant;
  Post: OleVariant;
  Frame: OleVariant;
  Url: OleVariant;
  P: Pointer;
begin
  IE := TInternetExplorer.Create(nil);
  IE.Connect;
  IE.Visible := True;
  Url := UrlStr;
  Fl := Unassigned;
  Frame := '_blank';
  Post := VarArrayCreate([0, Length(PostStr) - 1], VT_I4);
  P := VarArrayLock(Post);
  try
    move(PostStr[1], P, Length(PostStr));
  finally
    VarArrayUnlock(Post);
  end;
  try
    IE.Navigate2(Url, Fl, Frame, Post);
  finally
    IE.Free;
  end;
end;

PM MAIL   Вверх
Демо
Дата 18.12.2005, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 3
Всего: 50



Кстати, все поля формы, за исключением типа FILE, можно заполнять программно.
Сейчас поищу код.
Добавлено @ 16:20
Сорри, это не по теме топика - забыл уже первоначальный вопрос.


--------------------
    
PM MAIL ICQ Skype   Вверх
p0s0l
Дата 18.12.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 1
Всего: 112



Цитата(Snowy @ 16.12.2005, 15:24)
Вроде работает. В рантайме...
Если запускаю из Delphi, IE также сыпется по полной программе с завалом всего explorer.exe.
Вроде все заплаты стоят.
Ерунда какая-то.
Опера чисто все проглотила. А IE унес систему в далекую даль.
Пришлось ребутиться.
Выложи этот код, если остался



--------------------
С уважением, г-н Посол.
PM   Вверх
Snowy
Дата 18.12.2005, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(p0s0l @ 18.12.2005, 17:36)
Выложи этот код, если остался

Так вот этот код и есть.
Также пробовал вариант Демо - тоже сыпется.
Так что видимо вопрос не к коду, а к взаимоотношениям IE и дельфи.
Без дельфи все нормально.
На этом бы я и успокоился, но у другого человека та же история без всяких дельфи.
Анализ я не проводил - человек удаленный. Может там тоже какой дебагер был...
Просто ShellExecute(0,'open',pChar(URL),NIL,NIL,SW_SHOWNORMAL); работает корректно.
Пробовал на других машинах, с той же виндой и теми же D7 и IE6. Все корректно даже под Дельфи.
Все неясно. Это из серии загадок...

Проанализировал последовательность - под дельфей запускаю прогу, она вызывает IE, IE сыпется, вызывается дельфевый дебагер, который мне показывает asm код в треде iexplorer.exe, где все посыпалось. После этого ни программа, ни IE, ни дельфи не отвечают. Закрываю насильно - умирает все, вместе с explorer.exe. explorer перезапускается. Если звуковушка была в той сессии активна, то не освобождается и звука нет до перезагрузки.
Вот такие чудеса.
Завтра пойду на работу, буду пробовать отключить дельфевый дебагер, ну и еще мысли есть...

Вобщем, получается, вопрос закрыт, т.к. артефакт не зависит от кода.
PM MAIL   Вверх
RA
Дата 18.12.2005, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Вот ещё один пост, работает в рантайме.

Код

uses ActiveX, SHDocVw, StdCtrls,comobj;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  EncodedStr: string;
  ie: IWebBrowser2;
  Url, Flags, TargetFrameName, PostData, Headers: OleVariant;
begin
  ie := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
  ie.Left := 100;
  ie.Top := 100;
  ie.Width := 640;
  ie.Height := 400;
  ie.MenuBar := false;
  ie.AddressBar := false;
  ie.Resizable := false;
  ie.StatusBar := false;
  ie.ToolBar := 0;
  Url := 'http://forum.vingrad.ru/index.php?';
  ////////////////////

  EncodedStr := 'act=Post&CODE=03&f=86&t=74464&UserName=TESTER&Post=TEST&enableemo=yes&enablesig=yes';

  PostData := VarArrayCreate([0, Length(EncodedStr) - 1], varByte);

  for I := 1 to Length(EncodedStr) do
    PostData[I - 1] := Ord(EncodedStr[I]);

  Headers := 'Content-Type: application/x-www-form-urlencoded' + #10#13;

  /////////////////////////////////
  ie.Navigate2(Url,Flags,TargetFrameName,PostData,Headers);
  ie.Visible := true;
end;

PM   Вверх
Snowy
Дата 18.12.2005, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Так это то же самое.

PM MAIL   Вверх
RA
Дата 18.12.2005, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Цитата(Snowy @ 18.12.2005, 19:00)
Так это то же самое.

Так с перламутровыми пуговицами. smile
PM   Вверх
MacTep
Дата 30.1.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Snowy, ну так вопрос решился? Мне тоже надо открыть URL в браузере и передать в одной из полей формы данные. После этого пользователь уже сам нажмет кнопку на форме странички и все нормально отправится. Но как до этого все сделать - не догоняю...


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Snowy
Дата 30.1.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Я так и не победил. Пришлось изменить правила взаимодействия.
Передавай через Get.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1201 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.