Нужно открыть 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, что тоже не очень хорошо.
Есть ли какие-то еще мысли по поводу того как сотворить нужное? Ну возможно идеального решения и не существует, но может как-то можно что-то получше придумать?