Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Открыть URL в браузере используя POST-запрос


SergP ©   (09.06.17 12:49

Нужно открыть URL, выполнивши POST-запрос, желательно в браузере по умолчанию. Гугление результатов не дало, кроме нескольких аналогичных вопросов без ответов.

Есть некий сайт. Пусть для примера это будет mysite.com (на самом деле он другой). И его нужно открыть POST-запросом, передавши некие данные, пусть для примера это будет VAR1=77777

С IE я когда-то делал так:

procedure TForm1.Button2Click(Sender: TObject);
var
 S:string;
 ie:variant;
 flags,TargetFrameName,PostData,Headers:OleVariant;
begin
 ie:=CreateOleObject('InternetExplorer.application');
 ie.Silent := False;
 s:='VAR1=77777';
 Headers:='Content-Type: application/x-www-form-urlencoded'#10#13;
 PostData:=VarArrayCreate([1,Length(s)+1],varByte);
 System.move(S[1],VarArrayLock(PostData)^,length(s)+1);
 VarArrayUnlock(PostData);
 ie.navigate('http://mysite.com',flags,targetFrameName,PostData,Headers);
 ie.visible:=true;
end;


Но IE сейчас мало кто использует, посему у многих стоят старые его версии. Например с 8-й версией нужный сайт не работает.

Пытался использовать Firefox, но сделать нужное получилось только таким образом:


procedure TForm1.Button3Click(Sender: TObject);
var
 datastr:PAnsiChar;
 er:integer;
begin
datastr:='data:text/html,<form%20id=%22fwm%22%20action=%22'
+'http://mysite.com%22%20method=%22POST%22><input%20type=%22hidden%22%20name=%22VAR1%22%20value=%2277777%22>%20'
+'</form><script%20type=%22text/javascript%22>document.getElementById(%22fwm%22).submit()%20</script>';
er:=ShellExecute (Form1.Handle, nil, 'firefox', datastr, nil, SW_SHOWNORMAL);
if er<33 then ShowMessage('Ошибка'+inttostr(er));
end;


Опять-таки имеются проблемы:
1. У пользователя может firefox не быть установленным. А другие браузеры не факт что поддерживают такую схему ( data:URI ).
Да и такой способ не позволяет использовать браузер по умолчанию. Если не указывать чем мы хотим открыть data:URI, то в отличии от других схем c протоколами http, https и пр. оно не открывается браузером вообще.
2. В момент открытия браузера в адресной строке видно содержимое переменной datastr, что тоже не очень хорошо.

Есть ли какие-то еще мысли по поводу того как сотворить нужное? Ну возможно идеального решения и не существует, но может как-то можно что-то получше придумать?


DayGaykin ©   (09.06.17 14:05[1]

Первое что приходит в голову, сделать сервис в интернете, который будет превращать GET в POST


SergP ©   (09.06.17 15:03[2]


> DayGaykin ©   (09.06.17 14:05) [1]
>
> Первое что приходит в голову, сделать сервис в интернете,
>  который будет превращать GET в POST


Если в интернете делать свой сайт, то задача решается проще и надобность в подобном извращении вообще отпадает. Но хотелось бы обойтись без привязки к какому-нить своему ресурсу в инете.


rrrrrr ©   (09.06.17 15:11[3]

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


rrrrrr ©   (09.06.17 15:14[4]

В момент открытия браузера в адресной строке видно содержимое переменной datastr, что тоже не очень хорошо.


один мой знакомый погромист когда-то искренне считал,
что при посте когда аргументы не в урл, то
"все надежно зашифровано и никто ни в жисть  не догадается"


SergP ©   (09.06.17 16:08[5]


> rrrrrr ©   (09.06.17 15:14) [4]
>
> В момент открытия браузера в адресной строке видно содержимое
> переменной datastr, что тоже не очень хорошо.
>
>
> один мой знакомый погромист когда-то искренне считал,
> что при посте когда аргументы не в урл, то
> "все надежно зашифровано и никто ни в жисть  не догадается"


Я не стремлюсь к идеальному варианту когда "никто ни жисть не догадается".
Но количество тех, "кто догадается" лучше все-же свести к минимуму.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо