Wie speichere ich ein Lesezeichen in Firefox mit POST-Daten?

23

Ich möchte eine Seite, auf die mit GET nicht zugegriffen werden kann, als Firefox-Lesezeichen speichern. Die einzige Möglichkeit, die Seite abzurufen, besteht darin, einige POST-Daten zu senden.

Zum Beispiel möchte ich eine Chronopost-Paketverfolgungsseite mit einem Lesezeichen versehen , auf der POST nur zur Eingabe von Paketnummern verwendet werden kann.

Kennt jemand eine Firefox-Erweiterung oder eine andere Technik, mit der ich das machen könnte?

Etienne Dechamps
quelle
Nur ein Geek-Hinweis: GET-Anfragen dürfen keine Daten ändern, deshalb können Sie sie mit einem Lesezeichen versehen und so oft aufrufen, wie Sie möchten. POST-Anforderungen können den Status auf dem Server ändern, weshalb sie nicht einfach mit Lesezeichen versehen werden können. Denken Sie bei POST-Links, die Sie als Lesezeichen speichern, darüber nach, ob ein mehrmaliger Anruf zu Problemen führen kann, z. B. der Kauf eines zusätzlichen Artikels bei Amazon.
Rich Homolka

Antworten:

20

Verwenden Sie ein Lesezeichen. Sie können beispielsweise das Tool unter http://userjs.up.seesaa.net/js/bookmarklet.html verwenden , um ein Lesezeichen mit folgendem Code zu erstellen:

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

Verwenden Sie dann den generierten Lesezeichen-Link als Lesezeichen in Ihrem bevorzugten Browser. Wenn Sie darauf klicken, wird ein Fenster geöffnet, ein Formular mit den Parametern erstellt {search:'test'}und dieses Formular gesendet.

Um die URL und die Parameter zu ändern, müssen Sie nur den letzten Aufruf anpassen post_to_url.

Diese Strategie kann großartig sein, wenn Sie das Lesezeichen nur einmal erstellen und häufig verwenden müssen. Es ist jedoch nicht so einfach, neue Lesezeichen zu erstellen, wenn Sie dies regelmäßig tun müssen.

StriplingWarrior
quelle
Benötigen Sie nicht die Umkreissuche in {search: 'test'}?
Anton Daneyko
1
@mezhaka: Nein. Da dies tatsächlich als Javascript und nicht als JSON-Zeichenfolge ausgewertet wird, sind Anführungszeichen um Eigenschaftsnamen optional, es sei denn, der Eigenschaftsname enthält ein Leerzeichen oder ein Sonderzeichen.
StriplingWarrior
1
Danke für die Antwort. Müssen Sie, wenn ich meinen Schlüssel zitieren muss: Werte? Wenn meine Schlüssel und Werte Leerzeichen oder Nicht-ASCII-Zeichen enthalten, reicht dies aus, um sie mit '' zu umgeben, oder muss ich mich auch um Anführungszeichen wie ö kümmern?
Anton Daneyko
@mezhaka: Hier sind die Regeln: stackoverflow.com/a/9568622/120955 .
StriplingWarrior
4

Unter Verwendung der Antwort von @StriplingWarrior habe ich das Skript ein wenig geändert, um dasselbe Verhalten wie bei den normalen Lesezeichen zu erzielen, indem ich das Lesezeichen im selben Fenster öffne

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

Mit dem Tool in http://userjs.up.seesaa.net/js/bookmarklet.html können Sie einfach den Code kopieren und einfügen, die URL und die Parameter ändern und das generierte Lesezeichen zu Ihren Lesezeichen hinzufügen. Dies ist sehr nützlich, um beispielsweise auf das Kontrollfeld Ihres Routers zuzugreifen.

pablobart
quelle
4

Dank der Antworten in dieser Frage habe ich dieses schöne Add-On für Firefox gefunden: Bookmark POST . Es fehlt eine gute Dokumentation, aber dies sollte Ihnen den Einstieg erleichtern:

Mit diesem Lesezeichen sind es vier einfache Schritte zu Ihrer mit einem Lesezeichen versehenen POST-Anfrage (kein Javascript erforderlich):

  1. Öffnen Sie die Seite mit dem Formular, das Sie mit einem Lesezeichen versehen möchten, und füllen Sie das Formular auf "typische" Weise aus. Noch NICHT einreichen.
  2. Öffnen Sie die Web-Developer Tools -> Network Analysis.
  3. Senden Sie Ihr Formular. Der Submit wird in der Netzwerkanalyse angezeigt. Dort können Sie "Bearbeiten und erneut senden" auswählen und den "Request-Body" kopieren.
  4. Erstellen Sie ein Lesezeichen auf die Formularseite und fügen Sie die Zeichenfolge POSTDATA={YOUR_REQUEST_BODY_HERE}als Lesezeichen Beschreibung .

Für mich ist das viel einfacher als mit Javascript zu fummeln.

SebastianH
quelle
Ausgezeichnete Antwort, aber es hat nicht funktioniert in Waterfox 56.2
Euri Pinhollow
3

Einfachster Ansatz:

Lesezeichen mit ausgefülltem Formular und automatischem Upload

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

Nachteil: Chromium sendet die aktuelle Webseiten-URL als HTTP-Verweis. (Firefox und IE würden nicht.)

Warum ist Referer wichtig? Ohne Berücksichtigung von Datenschutzbedenken überprüften einige Websites den Verweis auf POST, um sich vor böswilligen Anfragen durch das Posten von versteckten Iframe-Formularen zu schützen.

Alternativer Ansatz:

Hier beschrieben , ist es etwas lesbarer, benötigt aber irgendwo eine HTML-Datei. Die Verwendung sieht dann so aus:

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

Beim Durcharbeiten einer lokal gespeicherten Datei wird der Referer nicht gesendet. Auch in Chrom.
Wenn die Datei auf einer Remote-Website abgelegt wird, wird der Referer gesendet, der den Host der Website und die ursprüngliche Abfragezeichenfolge enthält.

Benutzer
quelle
2

Das Frmget-Lesezeichen funktioniert für die vielen Sites, die für die http-Methode gleichgültig sind: Wenden Sie das Lesezeichen an, senden Sie das Formular ab, setzen Sie ein Lesezeichen für die Ergebnisseite.

Für Sites, die POST benötigen, gibt es diese Erweiterung , die nicht besonders benutzerfreundlich ist. Sie können es mit frmget kombinieren: frmget anwenden, das Formular senden, die Seite mit einem Lesezeichen versehen, die GET-Parameter in das Beschreibungsfeld mit dem Präfix kopieren POSTDATA=.

Tobu
quelle
1

Ich habe das von @StriplingWarrior bereitgestellte Skript ein wenig geändert, um eine HAR-Datei als Parameter zu akzeptieren. Die HAR-Datei kann in den Chrome Developer Tools (Strg + Umschalt + J) gespeichert werden.

Öffnen Sie zunächst die Seite mit den bereits bereitgestellten Formulardaten, klicken Sie dann mit der rechten Maustaste auf das erste Dokument auf der Registerkarte "Netzwerk" und wählen Sie "Eintrag als HAR kopieren". Fügen Sie dann den Inhalt in das folgende Skript ein:

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

Speichern Sie diese als HTML-Datei und es sollte das gepostete Formular öffnen. Dies funktioniert nicht, wenn die Site ViewState verwendet oder den Referrer überprüft.

bortao
quelle
0

Soweit ich von Post verstehe, gibt es keine Möglichkeit, diese Daten selbst aufzuzeichnen und erneut zu senden.

Ich schlage vor, ein Add-On zu installieren, das Formulare besser ausfüllt als Firefox.

In Chrome ist eine sehr leistungsstarke Funktion zum Erkennen und Ausfüllen von Formularen integriert, aber ich bin sicher, dass es ein Firefox-Addon gibt, das dasselbe tut.

Probieren Sie dieses aus, es sieht vielversprechend aus: Form Saver Firefox Add-on

robertpateii
quelle
Leider bietet Chrome nicht an, Kennwörter für generische HTTP-AUTH-Seiten zu speichern.
Qroberts
Lazarus ist heutzutage besser als Form Saver.
Tobu
0

Ich benutze dieses Firefox-Addon, um POST-Aktionen zu bookmarken.

Northben
quelle
0

Basierend auf dem Lesezeichen des Benutzers :

Dies scheint für UPS mit Firefox und einem Schlüsselwort für die Suchleiste zu funktionieren (z. B. "ups XYZ", wobei XYZ dann in den %sPlatzhalter innerhalb des Bookmarklets eingefügt wird):

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

(Beachten Sie, dass dies eine Zeile sein muss)

Siehe auch:

Griff
quelle