Программно открыть Firefox и сделать POST запрос? [идея: MozRepl, предложения?]
В моем приложении мне нужна кнопка, которая открывает Firefox (если он еще не открыт), выполняет запрос POST, включая загрузку файла, и отображает полученную страницу пользователю (для дальнейшей навигации).
Из того, что я нашел до сих пор, это, кажется, требует использования расширения Firefox, такого как MozRepl или JSSH, поэтому я могу подключиться к процессу через Telnet или SSH из моего приложения. Есть ли другие способы? Я открыт для хороших предложений...
Затем мне нужно будет использовать content.XMLHttpRequest для создания запроса POST:
var req = new XMLHttpRequest();
req.open("POST", "http://myurl", true);
// [...]
req.send()
Но что входит в [...]? Так или иначе, есть объект File, который построен из локальных форм; но как я могу создать экземпляр и заполнить один сам? И как мне получить результаты страницы для отображения в Firefox?
Я могу либо записать временный файл на диск и прочитать его оттуда, либо записать содержимое файла напрямую через Javascript/MozRepl, оба приемлемы для меня (но 1), вероятно, не для Javascript).
Заранее спасибо, -М.
3 ответа
Из командной строки вы можете открыть страницу, которая будет содержать заполненную форму и JavaScript, который будет запускать эту форму для публикации. Защита XSS применяется только к фоновому XMLHttpRequest, это нормально, если вы публикуете форму и автоматически перемещаете просмотр на эту страницу.
Таким образом, вы должны открыть веб-страницу, которая будет загружать форму.
Но вы даже не обязаны создавать эту веб-страницу отдельно, вы можете установить ее с JavaScript прямо вместо URL, как работают букмарклеты:
firefox "javascript:'<html><body onload=\'document.forms[0].submit()\'><form action=\'http://www.example.com\' method=\'POST\'><input name=\'whatever\' value=\'whatever\' type=\'hidden\'></form></body></html>'"
Или вы можете создать HTML-файл, который перенаправил бы GET на POST, тогда использование будет выглядеть следующим образом:
file:///C:/getToPost?name1=value1&name2=value2#http://url.com/service
Этот метод описан в ответе этого суперпользователя с исходным кодом для такого файла.
Обратите внимание, что этот HTML-файл не обязательно должен быть локальным, он может быть размещен на удаленном сервере. Но учтите, что в случае удаленного файлового браузера конечный веб-сайт уведомит ваш сайт о перенаправлении как HTTP Referer.
Из командной строки:
firefox --new-window www.example.com
Откроется новое окно Firefox, и перейдите к URL-адресу, который вы даете. Похоже, вы можете просто использовать свою цель POST в качестве URL, но если нет, вы всегда можете перейти на страницу, которая делает вызов $.POST.
Не могли бы вы сделать запрос GET на другую страницу на вашем сервере, содержащую код AJAX, который отправляет запрос POST? Вы всегда можете открыть браузер с любым URL-адресом, который может включать строку запроса без какого-либо причудливого API (т.е. system('firefox.exe http://stackru.com')
, Таким образом, вам не нужно беспокоиться о взаимодействии браузера.
Кроме того, почему бы просто не сделать запрос POST в приложении и отобразить результаты в приложении?