22

Я хотел бы сохранить как закладку Firefox страницу, которая недоступна с помощью GET. Единственный способ получить страницу - это отправить некоторые данные POST.

Например, я хотел бы добавить в закладки страницу отслеживания посылок Chronopost, которая позволяет только POST для ввода номеров посылок.

Кто-нибудь знает расширение Firefox или другую технику, которая позволила бы мне это сделать?

10 ответов10

19

Используйте букмарклет. Например, вы можете использовать инструмент по адресу http://userjs.up.seesaa.net/js/bookmarklet.html, чтобы создать букмарклет со следующим кодом:

(function(){
  var post_to_url = function(path, params, method) {
    var openWindow = window.open(path);
    method = method || "post"; 
    var form = openWindow.document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
    }
    openWindow.document.body.appendChild(form);
    form.submit();
  };
post_to_url(
  'http://www.chronopost.fr/transport-express/livraison-colis/engineName/search/accueil/suivi', 
  {search:'test'});
})()

Затем используйте созданную ссылку на закладку в качестве закладки в вашем любимом браузере. Когда вы щелкнете по нему, он откроет окно, создаст форму с параметрами {search:'test'} и отправит эту форму.

Чтобы изменить URL-адрес и параметры, просто настройте последний вызов post_to_url .

Эта стратегия может быть полезной, если вам просто нужно создать закладку один раз и использовать ее много раз. Однако создание новых закладок не очень просто, если вам нужно делать это на регулярной основе.

4

Используя ответ @StriplingWarrior, я немного изменил сценарий, чтобы он действовал так же, как обычные закладки, открыв закладку в том же окне.

(function(){
  var post_to_url = function(path, params, method) {
    method = method || "post"; 
    var form = window.document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
    }
    window.document.body.appendChild(form);
    form.submit();
  };
post_to_url(
  'http://192.168.0.1/goform/login', 
  {loginPassword:'password',loginUsername:'admin'});
})()

Используя инструмент http://userjs.up.seesaa.net/js/bookmarklet.html, вы можете просто скопировать и вставить код, изменить URL-адрес и параметры и добавить созданный букмарклет в свои закладки. Это довольно полезно, например, для доступа к панели управления маршрутизатором.

4

Благодаря ответам на этот вопрос я нашел это прекрасное дополнение для Firefox: Bookmark POST. В ней отсутствует хорошая документация, но с этого следует начать:

С этой закладкой можно сделать четыре простых шага для вашего POST-запроса, отмеченного закладкой (JavaScript не требуется):

  1. Откройте страницу с формой, которую вы хотите добавить в закладки, и заполните форму "типичным" способом. НЕ отправляйте еще.
  2. Откройте Инструменты веб-разработчика -> Анализ сети.
  3. Отправьте вашу форму. Подтверждение будет отображаться в сетевом анализе. Там вы можете выбрать "Редактировать и отправить снова" и скопировать "Тело запроса".
  4. Создайте закладку на странице формы и добавьте строку POSTDATA={YOUR_REQUEST_BODY_HERE} в качестве описания закладок.

Для меня это намного проще, чем возиться с Javascript.

2

Букмарклет frmget работает на многих сайтах, неравнодушных к методу http: примените букмарклет, отправьте форму, добавьте страницу результатов в закладки.

Для сайтов, которые требуют POST, есть это расширение, которое не очень удобно для пользователя. Вы можете комбинировать его с frmget: применить frmget, отправить форму, добавить страницу в закладки, скопировать параметры GET в поле описания с префиксом POSTDATA= .

2

Самый простой подход:

Букмарклет с заполненной формой и автозагрузкой

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>'

Недостаток: Chromium будет отправлять URL текущей веб-страницы как HTTP-реферер. (Firefox и IE не будут.)

Почему реферер имеет значение? Не принимая во внимание проблемы конфиденциальности, некоторые сайты проверяют PEFREF на Rerer, чтобы защитить себя от вредоносных запросов, сделанных скрытой публикацией формы iframe.

Альтернативный подход:

Описанное здесь, это немного более читабельно, но где-то нужен HTML-файл, использование будет примерно таким:

file:///C:/getToPost?name1=value1&name2=value2#http://url.com/service

При работе через локально сохраненный файл реферер не будет отправлен. Даже в Хроме.
Если файл будет размещен на удаленном веб-сайте, будет отправлен реферер, который будет содержать хост веб-сайта и исходную строку запроса.

1

Я немного изменил скрипт, предоставленный @StriplingWarrior, чтобы принимать файл HAR в качестве параметра. Файл HAR можно сохранить из Инструментов разработчика Chrome (Ctrl+Shift+J).

Сначала откройте страницу с уже опубликованными данными формы, затем щелкните правой кнопкой мыши первый документ на вкладке Сеть и выберите "Копировать запись как HAR". Затем вставьте содержимое в скрипт ниже:

<html><body><script>
function dopost() {
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", har["request"]["url"]);
var params = har["request"]["postData"]["params"];
for(var e in params) {
    var hiddenField = document.createElement("input");
    hiddenField.setAttribute("type", "hidden");
    hiddenField.setAttribute("name", params[e]["name"]);
    hiddenField.setAttribute("value", params[e]["value"]);
    form.appendChild(hiddenField);
}
document.body.appendChild(form);
form.submit();
}
window.onload=dopost;

var har=
//-----PASTE HERE------

</script>
</body></html>

Сохраните это как HTML-файл, и он должен открыть опубликованную форму. Это не работает, если сайт использует viewstate или проверяет реферер.

1

Используйте плагин iMacro, доступный для Firefox и Chrome.

0

Я использую этот Firefox Addon для добавления в закладки действий POST.

0

На основании букмарклета пользователя:

Похоже, это работает для UPS с Firefox и ключевым словом для строки поиска (например, "ups XYZ", где XYZ затем помещается в заполнитель %s внутри букмарклета):

javascript:'
<html><body%20onload="document.forms[0].submit()">
  <form%20action="https://wwwapps.ups.com/WebTracking/track"%20method="POST">
  <input%20name="trackNums"%20value="%s"%20type="hidden">
  <input%20name="track.x"%20value="anything"%20type="hidden">
  </form>
</body></html>'

(обратите внимание, это должна быть одна строка)

Смотрите также:

0

Из того, что я понимаю о посте, нет способа записать эти данные самостоятельно и повторно отправить их.

Я предлагаю получить надстройку, которая заполняет формы для вас лучше, чем Firefox по умолчанию.

В Chrome встроена очень мощная функция распознавания и заполнения форм, но я уверен, что есть аддон Firefox, который делает то же самое.

Попробуйте, это выглядит многообещающе:Form Saver Firefox Add-on

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .