Jak zapisać zakładkę w przeglądarce Firefox z danymi POST?

23

Chciałbym zapisać jako zakładkę Firefox stronę niedostępną przy użyciu GET. Jedynym sposobem na odzyskanie strony jest wysłanie niektórych danych POST.

Na przykład chciałbym dodać zakładkę do strony śledzenia paczek Chronopost , która umożliwia POST tylko do wprowadzania numerów paczek.

Czy ktoś zna rozszerzenie Firefoksa lub inną technikę, która pozwoliłaby mi to zrobić?

Etienne Dechamps
źródło
Uwaga dla maniaków: żądania GET nie powinny zmieniać danych, dlatego możesz je dodawać do zakładek i wywoływać je tak często, jak chcesz. Żądania POST mogą zmieniać stan na serwerze, dlatego nie można ich łatwo dodawać do zakładek. W zakładkach POST, które dodałeś do zakładek, zastanów się, czy wielokrotne dzwonienie do nich spowoduje problemy, takie jak zakup dodatkowego przedmiotu od Amazon.
Rich Homolka

Odpowiedzi:

20

Użyj bookmarkletu. Na przykład możesz użyć narzędzia pod adresem http://userjs.up.seesaa.net/js/bookmarklet.html, aby utworzyć bookmarklet z następującym kodem:

(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'});
})()

Następnie użyj wygenerowanego linku bookmarklet jako zakładki w swojej ulubionej przeglądarce. Po kliknięciu otworzy się okno, utworzy formularz z parametrami {search:'test'}i prześle ten formularz.

Aby zmienić adres URL i parametry, po prostu dostosuj ostatnie połączenie post_to_url.

Ta strategia może być świetna, jeśli musisz tylko raz utworzyć zakładkę i używać jej wiele razy. Jednak nie jest to strasznie łatwe do tworzenia nowych zakładek, jeśli trzeba to robić regularnie.

StriplingWarrior
źródło
Nie potrzebujesz funkcji „wokół wyszukiwania w {search: 'test”}?
Anton Daneyko
1
@mezhaka: Nie. Ponieważ jest to faktycznie oceniane jako javascript, a nie ciąg JSON, cudzysłowy wokół nazw właściwości są opcjonalne, chyba że nazwa właściwości zawiera spację lub znak specjalny.
StriplingWarrior
1
Dziękuję za odpowiedź. Czy jeśli muszę podać adres URL, proszę podać mój klucz: wartości? Na przykład, jeśli mam spacje lub znaki spoza ASCII w moich kluczach i wartościach, czy to wystarczy, aby otoczyć je znakiem „”, czy też muszę też zadbać o cytowanie symboli takich jak ö?
Anton Daneyko,
@mezhaka: Oto zasady: stackoverflow.com/a/9568622/120955 .
StriplingWarrior
4

Korzystając z odpowiedzi @StriplingWarrior, zmieniłem nieco skrypt, aby zachowywał się tak samo jak normalne zakładki, otwierając zakładkę w tym samym oknie

(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'});
})()

Za pomocą narzędzia w http://userjs.up.seesaa.net/js/bookmarklet.html możesz po prostu skopiować i wkleić kod, zmienić adres URL i parametry oraz dodać wygenerowany bookmmarklet do zakładek. Jest to bardzo przydatne, aby uzyskać dostęp na przykład do panelu sterowania routera.

pablobart
źródło
4

Dzięki odpowiedziom na to pytanie znalazłem ten piękny dodatek do przeglądarki Firefox: Bookmark POST . Brakuje w nim dobrej dokumentacji, ale powinno to zacząć:

Dzięki tej zakładce są to cztery proste kroki do twojego żądania POST z zakładkami (nie wymaga javascript):

  1. Otwórz stronę z formularzem, który chcesz dodać do zakładek, i wypełnij formularz w „typowy” sposób. NIE przesyłaj jeszcze.
  2. Otwórz narzędzia dla programistów -> Analiza sieci.
  3. Prześlij formularz Przekaz pojawi się w analizie sieci. Tam możesz wybrać „Edytuj i wyślij ponownie” i skopiować „Body-Request”.
  4. Utwórz zakładkę na stronie formularza i dodaj ciąg POSTDATA={YOUR_REQUEST_BODY_HERE}jako opis zakładek .

Dla mnie jest to o wiele łatwiejsze niż bawienie się Javascriptem.

SebastianH
źródło
Doskonała odpowiedź, ale nie zadziałała w Waterfoxie 56.2
Euri Pinhollow
3

Najprostsze podejście:

Zakładka z wypełnionym formularzem i automatyczne przesyłanie

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

Wada: Chromium wyśle ​​bieżący adres URL strony jako odsyłacz HTTP. (Firefox i IE nie.)

Dlaczego polecający ma znaczenie? Bez uwzględnienia obaw o prywatność niektóre strony sprawdzałyby odsyłacz na POST, aby chronić się przed złośliwymi żądaniami wysyłanymi przez ukryty post iframe.

Alternatywne podejście:

Opisany tutaj , jest nieco bardziej czytelny, ale potrzebuje gdzieś pliku HTML, użycie będzie wyglądało tak:

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

Podczas pracy z plikiem zapisanym lokalnie referer nie zostanie wysłany. Nawet w chromie.
Jeśli plik zostanie umieszczony na zdalnej stronie internetowej, zostanie wysłany odnośnik, który będzie zawierał hosta strony i oryginalny ciąg zapytania.

użytkownik
źródło
2

W frmget bookmarkletu pracuje dla wielu witryn, które są obojętne dla metody http: zastosować bookmarkletu, przesłać formularz, zakładki strony z wynikami.

W przypadku witryn wymagających POST dostępne jest to rozszerzenie , które nie jest zbyt przyjazne dla użytkownika. Możesz połączyć to z frmget: zastosuj frmget, prześlij formularz, dodaj stronę do zakładek, skopiuj parametry GET do pola opisu, poprzedzone znakiem POSTDATA=.

Tobu
źródło
1

Zmodyfikowałem trochę skrypt dostarczony przez @StriplingWarrior, aby zaakceptować plik HAR jako parametr. Plik HAR można zapisać w Narzędziach programisty Chrome (Ctrl + Shift + J).

Najpierw otwórz stronę z już opublikowanymi danymi formularza, a następnie kliknij prawym przyciskiem myszy pierwszy dokument na karcie Sieć i wybierz „Kopiuj wpis jako HAR”. Następnie wklej zawartość skryptu poniżej:

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

Zapisz to jako plik HTML, aby otworzyć formularz. Nie działa to, jeśli witryna korzysta ze stanu wyświetlania lub sprawdza stronę odsyłającą.

bortao
źródło
0

Z tego, co rozumiem na temat postów, nie ma sposobu, aby samodzielnie zapisać te dane i wysłać je ponownie.

Sugeruję, aby uzyskać dodatek, który lepiej wypełnia formularze niż domyślnie Firefox.

Chrome ma wbudowaną bardzo zaawansowaną funkcję rozpoznawania i wypełniania formularzy, ale jestem pewien, że istnieje dodatek do Firefoksa, który robi to samo.

Wypróbuj ten, wygląda obiecująco: dodatek Form Saver Firefox

robertpateii
źródło
Niestety Chrome nie oferuje zapisywania haseł do ogólnych stron HTTP AUTH.
qroberts 18.10.10
Łazarz jest dziś lepszy niż oszczędzanie formy.
Tobu,
0

Używam tego dodatku do Firefoksa do dodawania zakładek do akcji POST.

Northben
źródło
0

Na podstawie bookmarkletu użytkownika :

Wydaje się, że działa to w przypadku UPS z Firefoksem i słowa kluczowego dla paska wyszukiwania (np. „Ups XYZ”, gdzie XYZ następnie przechodzi do %ssymbolu zastępczego w bookmarklet):

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

(zwróć uwagę, że musi to być jedna linia)

Zobacz też:

uchwyt
źródło