Как сохранить закладку в Firefox с данными POST?


23

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

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

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


Просто замечание гика: запросы GET не должны изменять данные, поэтому вы можете добавлять их в закладки и вызывать их так часто, как захотите. POST-запросам разрешено изменять состояние на сервере, поэтому их нелегко добавить в закладки. На закладках POST, которые вы добавляете в закладки, подумайте, не вызовет ли их несколько раз такие проблемы, как покупка дополнительного товара в Amazon.
Богатая гомолка

Ответы:


20

Используйте букмарклет. Например, вы можете использовать инструмент по адресу 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.

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


Вам не нужен поиск по кругу в {search: 'test'}?
Антон Данейко

1
@mezhaka: Нет. Поскольку это на самом деле оценивается как javascript, а не как строка JSON, кавычки вокруг имен свойств являются необязательными, если только имя свойства не содержит пробел или специальный символ.
StriplingWarrior

1
Спасибо за ответ. Вы, если мне нужно, чтобы URL цитата мой ключ: значения? Например, если в моих ключах есть пробелы или символы, отличные от ASCII, достаточно ли значений, чтобы они были заключены в '', или мне также нужно позаботиться о цитировании таких символов, как ö?
Антон Данейко

@mezhaka: Вот правила: stackoverflow.com/a/9568622/120955 .
StriplingWarrior

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.


Отличный ответ, но он не сработал в Waterfox 56.2
Euri Pinhollow

3

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

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

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

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


2

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

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


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 или проверяет реферер.



0

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

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

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

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


Но, к сожалению, Chrome не предлагает сохранять пароли для обычных HTTP-страниц AUTH.
Кробертс

Лазарь лучше, чем спасатель формы в наши дни.
Тобу


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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.