Comment enregistrer un signet dans Firefox avec des données POST?

23

Je souhaite enregistrer en tant que signet Firefox une page qui n'est pas accessible via GET. La seule façon de récupérer la page est d'envoyer des données POST.

Par exemple, je voudrais mettre en signet une page de suivi de colis Chronopost , qui permet uniquement à POST de saisir des numéros de colis.

Est-ce que quelqu'un connaît une extension Firefox ou une autre technique qui me permettrait de le faire?

Etienne Dechamps
la source
Juste une note geek: les demandes GET ne sont pas censées modifier les données, c'est pourquoi vous pouvez les mettre en signet et les appeler aussi souvent que vous le souhaitez. Les requêtes POST sont autorisées à changer d'état sur le serveur, c'est pourquoi elles ne sont pas facilement mises en signet. Sur les liens POST que vous mettez en signet, pensez si les appeler plusieurs fois entraînera des problèmes, tels que l'achat d'un article supplémentaire sur Amazon.
Rich Homolka

Réponses:

20

Utilisez un bookmarklet. Par exemple, vous pouvez utiliser l'outil à http://userjs.up.seesaa.net/js/bookmarklet.html pour créer un bookmarklet avec le code suivant:

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

Utilisez ensuite le lien du bookmarklet généré comme signet dans votre navigateur préféré. Lorsque vous cliquez dessus, il ouvre une fenêtre, crée un formulaire avec les paramètres {search:'test'}et soumet ce formulaire.

Pour modifier l'URL et les paramètres, ajustez simplement le dernier appel à post_to_url.

Cette stratégie peut être excellente si vous avez juste besoin de créer le signet une fois et de l'utiliser plusieurs fois. Cependant, il n'est pas très facile de créer de nouveaux signets si vous devez le faire régulièrement.

StriplingWarrior
la source
N'avez-vous pas besoin de la recherche autour dans {search: 'test'}?
Anton Daneyko
1
@mezhaka: Non. Étant donné que cela est actuellement évalué en tant que javascript, plutôt qu'en tant que chaîne JSON, les guillemets autour des noms de propriété sont facultatifs, sauf si le nom de la propriété comprend un espace ou un caractère spécial.
StriplingWarrior
1
Merci pour la réponse. Avez-vous si j'ai besoin d'url citer ma clé: valeurs? Par exemple, si j'ai des espaces ou des caractères non ASCII dans mes clés et mes valeurs, est-ce suffisant pour les entourer de '' ou dois-je également prendre soin de citer des symboles comme ö?
Anton Daneyko
@mezhaka: Voici les règles: stackoverflow.com/a/9568622/120955 .
StriplingWarrior
4

En utilisant la réponse de @StriplingWarrior, j'ai un peu changé le script pour avoir le même comportement que les signets normaux en ouvrant le signet sur la même fenêtre

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

En utilisant l'outil dans http://userjs.up.seesaa.net/js/bookmarklet.html, vous pouvez simplement copier et coller le code, modifier l'URL et les paramètres et ajouter le bookmmarklet généré à vos signets. C'est assez utile pour accéder par exemple au panneau de configuration de votre routeur.

pablobart
la source
4

Grâce aux réponses à cette question, j'ai trouvé ce magnifique add-on pour Firefox: Bookmark POST . Il manque une bonne documentation mais cela devrait vous aider à démarrer:

Avec ce signet, ses quatre étapes faciles pour votre demande POST signet (aucun javascript requis):

  1. Ouvrez la page avec le formulaire que vous souhaitez mettre en signet et remplissez le formulaire de manière "typique". Ne soumettez pas encore.
  2. Ouvrez les outils de développement Web -> Analyse de réseau.
  3. Soumettez votre formulaire. La soumission apparaîtra dans l'analyse du réseau. Là, vous pouvez sélectionner "Modifier et envoyer à nouveau" et copier le "corps de la demande".
  4. Créez un signet sur la page du formulaire et ajoutez la chaîne POSTDATA={YOUR_REQUEST_BODY_HERE}comme description des signets .

Pour moi, c'est beaucoup plus facile que de jouer avec Javascript.

SebastianH
la source
Excellente réponse mais cela n'a pas fonctionné dans Waterfox 56.2
Euri Pinhollow
3

Approche la plus simple:

Bookmarklet avec formulaire rempli et téléchargement automatique

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

Inconvénient: Chromium enverrait l'URL de la page Web actuelle en tant que référent HTTP. (Firefox et IE ne le feraient pas.)

Pourquoi le référent est-il important? Sans prendre en compte les problèmes de confidentialité, certains sites Web vérifieraient le référent sur POST pour se protéger contre les demandes malveillantes faites par un post de formulaire iframe caché.

Approche alternative:

Décrit ici , il est légèrement plus lisible mais a besoin d'un fichier HTML quelque part, l'utilisation sera comme:

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

Lorsque vous travaillez sur un fichier enregistré localement, le référent ne sera pas envoyé. Même en chrome.
Si le fichier sera placé sur un site Web distant, le référent sera envoyé et contiendra l'hôte du site Web et la chaîne de requête d'origine.

utilisateur
la source
2

Le bookmarklet frmget fonctionne pour les nombreux sites qui sont indifférents à la méthode http: appliquez le bookmarklet, soumettez le formulaire, marquez la page de résultat.

Pour les sites qui nécessitent un POST, il y a cette extension , qui n'est pas très conviviale. Vous pouvez le combiner avec frmget: appliquer frmget, soumettre le formulaire, mettre la page en signet, copier les paramètres GET dans le champ de description, préfixé par POSTDATA=.

Tobu
la source
1

J'ai modifié un peu le script fourni par @StriplingWarrior pour accepter un fichier HAR comme paramètre. Le fichier HAR peut être enregistré à partir des outils de développement de Chrome (Ctrl + Maj + J).

Ouvrez d'abord la page avec les données du formulaire déjà publiées, puis cliquez avec le bouton droit sur le premier document dans l'onglet Réseau et sélectionnez "Copier l'entrée en tant que HAR". Collez ensuite le contenu sur le script ci-dessous:

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

Enregistrez-le en tant que fichier html et il devrait ouvrir le formulaire publié. Cela ne fonctionne pas si le site utilise viewstate ou s'il vérifie le référent.

bortao
la source
0

D'après ce que je comprends de la publication, il n'y a aucun moyen d'enregistrer ces données vous-même et de les renvoyer.

Je suggère d'obtenir un module complémentaire qui remplit les formulaires mieux que Firefox par défaut.

Chrome a en fait une fonction de reconnaissance de formulaire et de remplissage très puissante intégrée, mais je suis sûr qu'il existe un module complémentaire Firefox qui fait la même chose.

Essayez celui-ci, il semble prometteur: Module complémentaire Firefox Form Saver

robertpateii
la source
Mais malheureusement, Chrome ne propose pas d'enregistrer les mots de passe pour les pages génériques HTTP AUTH.
qroberts
Lazarus est meilleur que l'économiseur de forme de nos jours.
Tobu
0

J'utilise cet addon Firefox pour mettre en signet les actions POST.

northben
la source
0

Basé sur le bookmarklet de l'utilisateur :

Cela semble fonctionner pour UPS avec Firefox et un mot-clé pour la barre de recherche (par exemple "ups XYZ" où XYZ va ensuite dans l' %sespace réservé à l'intérieur du 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>'

(notez qu'il doit s'agir d'une seule ligne)

Voir également:

manipuler
la source