Як зберегти закладку у 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, цитати навколо імен властивостей необов’язкові, якщо ім'я властивості не містить пробіл або спеціальний символ.
Стриптинг-воїн

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


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 не будуть.)

Чому референт має значення? Не беручи до уваги проблеми конфіденційності, деякі веб-сайти перевіряють реферера на POST, щоб захистити себе від зловмисних запитів, зроблених прихованою публікацією форми iframe.

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

Описано тут , воно трохи читабельніше, але потрібен десь HTML-файл, використання буде таким:

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

Під час роботи через локально збережений файл референт не надсилатиметься. Навіть у Chromium.
Якщо файл буде розміщений на віддаленому веб-сайті, тоді буде надісланий референт і буде містити хост веб-сайту та оригінальну рядок запиту.


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


Але, на жаль, Chrome не пропонує зберігати паролі для загальних HTTP AUTH сторінок.
qroberts

Сьогодні Лазар краще, ніж заощаджувач.
Тобу


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.