Speichern einer HTTP-POST-Anforderung in einem Lesezeichen oder ähnlichem wie bei einer GET-Anforderung

26

Sie können ein Lesezeichen mit einer GET-Anfrage wie folgt speichern:

http://url.com/service?variable=value

Können Sie eine POST-Anfrage auf irgendeine Weise in Chrome speichern? Vielleicht mit einem Plugin? Oder vielleicht in Firefox?

Die Idee ist, dass ich dies in einem Lesezeichen speichere und es schnell auslöse, anstatt jedes Mal ein Formular ausfüllen zu müssen.

Petruza
quelle
1
Je nach Betriebssystem, können Sie verwenden , curlum die POST - Anforderung aus einer Datei stattdessen zu senden
slhck
Testen Sie die Greasemonkey-Erweiterung, die für FF und Chrome verfügbar ist.
ott--

Antworten:

17

Die Idee ist, dass ich dies in einem Lesezeichen speichere und es schnell auslöse, anstatt jedes Mal ein Formular ausfüllen zu müssen.

Zu diesem Zweck ist die folgende HTML-Seite ausreichend. Es sollte in den meisten Browsern funktionieren.

<html>
    <head>
        <title>getToPost</title>
        <script>
            function getToPost()
            {
                var form = document.getElementsByTagName('form')[0];
                form.style.visibility = 'hidden';
                form.action = document.location.hash.substr(1);
                var search = decodeURIComponent(document.location.search);
                search = search.substr(1).split('&');
                for(var i = 0, j = search.length, input; i < j; i++)
                {
                    input = document.createElement('input');
                    search[i] = search[i].split('=');
                    input.name = search[i][0];
                    input.value = search[i][1];
                    form.appendChild(input);
                }
                form.submit();
            }
        </script>
    </head>
    <body onload="getToPost()">
        <form method="POST"></form>
    </body>
</html>

Wenn Sie es speichern unter, können C:\getToPostSie die folgende URL mit einem Lesezeichen versehen:

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

Sie können die meisten Zeichen in Namen oder Werten buchstäblich verwenden. Codieren Sie wie gewohnt:

#   ->   %23
%   ->   %25
&   ->   %26
=   ->   %3D
Dennis
quelle
Das hat für eine Seite direkt geklappt, danke! Für eine andere Site, die AJAX verwendet (glaube ich), funktioniert es jedoch noch nicht (ich könnte etwas falsch machen); Gibt es etwas, das sich ändern würde, wenn das Get / Post-Ding von AJAX gehandhabt wird?
verrückt nach natty
6

Wenn Sie nach einer browserübergreifenden Lösung suchen, für die keine Add-Ons oder externen Dateien erforderlich sind, können Sie Javascript mithilfe der folgenden Syntax direkt in ein Lesezeichen einfügen:

javascript:(function(){ <Your Javascript code goes here> })();

Entlehnen Sie sich einen Code aus Denis 'Antwort, um Folgendes zu veranschaulichen:

javascript:(function()
{ 
var form = document.getElementsByTagName('form')[0];
form.style.visibility = 'hidden';
form.method = 'post';
form.action = 'https://your.urlgoes.here/build?delay=0sec';
var search = 'name=ENVIRONMENT&value=production&name=DEPLOYTYPE&value=Incremental&name=BRANCH&value=master&statusCode=303&redirectTo=.&json={"parameter": [{"name": "ENVIRONMENT", "value": "production"}, {"name": "DEPLOYTYPE", "value": "Incremental"}, {"name": "BRANCH", "value": "master"}], "statusCode": "303", "redirectTo": "."}&Submit=Build';
search = search.substr(1).split('&');
for(var i = 0, j = search.length, input; i < j; i++)
{
input = document.createElement('input');
search[i] = search[i].split('=');
input.name = search[i][0];
input.value = search[i][1];
form.appendChild(input);
}
 form.submit();}
)();

Der Nachteil ist, dass all dies in einer einzelnen Zeile erfolgen muss, da ein Lesezeichen nur aus einer einzelnen Zeile besteht. Dies geht in das Lesezeichen selbst:

javascript:(function(){    var form = document.getElementsByTagName('form')[0];   form.style.visibility = 'hidden';   form.method = 'post';   form.action = 'https://your.urlgoes.here/build?delay=0sec';   var search = 'name=ENVIRONMENT&value=production&name=DEPLOYTYPE&value=Incremental&name=BRANCH&value=master&statusCode=303&redirectTo=.&json={"parameter": [{"name": "ENVIRONMENT", "value": "production"}, {"name": "DEPLOYTYPE", "value": "Incremental"}, {"name": "BRANCH", "value": "master"}], "statusCode": "303", "redirectTo": "."}&Submit=Build';   search = search.substr(1).split('&');   for(var i = 0, j = search.length, input; i < j; i++)   {   input = document.createElement('input');   search[i] = search[i].split('=');   input.name = search[i][0];   input.value = search[i][1];   form.appendChild(input);   }    form.submit();   })();

Eine Reihe von Leerzeichen können verwendet werden, um einfach in etwas lesbareres und zurück in eine einzelne Zeile zu konvertieren. Im obigen Beispiel kann "" in so etwas wie Notepad ++ durch \ r \ n ersetzt werden, um es wieder in mehrzeilig umzuwandeln. Um es dann zurück in eine einzelne Zeile zu konvertieren, konvertiert "" ein Suchen und Ersetzen durch \ r \ n "" es zurück in eine einzelne Zeile. Das macht es etwas weniger nervenaufreibend ...

Jotap
quelle
3

Aufbauend auf den anderen Antworten!

Die Debug-Version des Codes sowie Bereinigung UND jsbeautifier.org/.

(function() {
    var ThisAction = 'https://your.urlgoes.here/build?delay=0sec';
    /* A little JSON never hurt anyone */
    var ThisPost = {
        name: 'ENVIRONMENT',
        value: 'production',
        name: 'DEPLOYTYPE',
        value: 'Incremental',
        name: 'BRANCH',
        value: 'master',
        statusCode: '303',
        redirectTo: '.',
        json: '{"parameter": [{"name": "ENVIRONMENT", "value": "production"}, {"name": "DEPLOYTYPE", "value": "Incremental"}, {"name": "BRANCH", "value": "master"}], "statusCode": "303", "redirectTo": "."}',
        Submit: 'Build'
    };

    /* Help us locate this function */
    console.trace();
    /* See what we are looking at */
    console.log(document);
    var form = document.getElementsByTagName('form')[0];
    form.style.visibility = 'hidden';
    form.method = 'post';
    form.action = ThisAction;
    for (var key in ThisPost) {
        if (ThisPost.hasOwnProperty(key)) {
            input = document.createElement('input');
            input.name = key;
            input.value = ThisPost[key];
            form.appendChild(input);
        }
    }
    /* form.submit(); */
})();

Ohne den entsprechenden HTML-Code ist das Element mit dem Tag-Namen "form" möglicherweise nicht vorhanden. Andernfalls sieht es noch schlimmer aus. Das Obige zeigt dies gut. Beachten Sie, dass in Chrom-Javascript: URIs / Lesezeichen in einer neuen Registerkarte nicht funktionieren. Sie müssen zuerst einmal navigieren. Dies füllt das Dokumentobjekt, aber auch nur ein Javascript: alert ('t'); tut nichts.

Ich schlage folgendes vor.

(function() {
    var ThisAction = 'https://your.urlgoes.here/build?optional=uri_get';
    /* A little JSON never hurt anyone */
    var ThisPost = {
        multiple: 'value',
        key: 'pairs',
        or: 'JSON like so...',
        note: 'the double quotes and last item with NO trailing comma.',
        json: '{parameter: [{name: "stuff"}]}'
    };

    var form = document.createElement('form');
    form.style.visibility = 'hidden';
    form.method = 'post';
    form.action = ThisAction;
    for (var key in ThisPost) {
        if (ThisPost.hasOwnProperty(key)) {
            var input = document.createElement('input');
            input.name = key;
            input.value = ThisPost[key];
            form.appendChild(input);
        }
    }
    document.body.appendChild(form);
    form.submit();
})();

Entfernen Sie die Debug-Einstellungen, bereinigen Sie die Beispieleingaben, um die erwarteten Ergebnisse klarer darzustellen. Rufe http://jscompress.com/ oder was auch immer auf und erhalte eine einzelne Zeile.

!function(){var e="https://your.urlgoes.here/build?optional=uri_get",t={multiple:"value",key:"pairs",or:"JSON like so...",note:"the double quotes and last item with NO trailing comma.",json:'{parameter: [{name: "stuff"}]}'},i=document.createElement("form");i.style.visibility="hidden",i.method="post",i.action=e;for(var o in t)if(t.hasOwnProperty(o)){var a=document.createElement("input");a.name=o,a.value=t[o],i.appendChild(a)}document.body.appendChild(i),i.submit()}();

Bearbeiten: Geben Sie ein funktionierendes Beispiel an.

In Minneapolis, MN, USA, können Sie hiermit auf die ESSID "USIW Free WiFi" zugreifen. Nachdem sie https://login.usiwireless.com/mplsfree/logon.php?originalurl=www.google.com/ zum Registrieren eines Kontos verwendet haben, möchten sie aus Gründen des Missbrauchs eine Kreditkarte.

Verwenden Sie diese Option, um sich mit den offensichtlichen Ersetzungen beim Netzwerk anzumelden.

javascript:!function(){var e="https://login.usiwireless.com/mplsfree/logon.pl",o={usernameLogin:"USER",passwordLogin:"PASSWORD",originalurl:"www.google.com/"},n=document.createElement("form");n.style.visibility="hidden",n.method="post",n.action=e;for(var i in o)if(o.hasOwnProperty(i)){var t=document.createElement("input");t.name=i,t.value=o[i],n.appendChild(t)}document.body.appendChild(n),n.submit()}();
Mike Mestnik
quelle
3

Eine kürzere Version des Ansatzes für Javascript-Lesezeichen mit modernen Browserfunktionen und ES6:

post('https://example.com', {foo: 'bar'})

function post(url, formData) {
  const makeElem = (tag, props) => Object.assign(document.createElement(tag), props)
  const form = makeElem('form', { action: url, method: 'post', style: 'display: none' })
  for (const [name, value] of Object.entries(formData)) {
    form.appendChild(makeElem('input', { name, value }))
  }
  document.body.appendChild(form)
  form.submit()
}

Legen Sie Folgendes als Lesezeichenziel fest und ersetzen Sie URL und formData entsprechend.

javascript:post('https://example.com',{foo:'bar'});function post(a,b){const c=(e,f)=>Object.assign(document.createElement(e),f),d=c('form',{action:a,method:'post',style:'display: none'});for(const[e,f]of Object.entries(b))d.appendChild(c('input',{name:e,value:f}));document.body.appendChild(d),d.submit()}
Raffinesse
quelle
0

Als ich auf dasselbe Problem stieß, fand ich dieses wunderschöne Add-On für Firefox: Bookmark POST

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 .
SebastianH
quelle
0

Ich weiß, dass dies eine alte Frage mit einer akzeptierten Antwort ist. Diese Antwort ist jedoch ziemlich manuell und erfordert einen JavaScript-Programmieraufwand für den Benutzer. Es sind andere Browser-Addons / -Erweiterungen / -Plugins aufgeführt, die jedoch nicht mit der neuesten Browserversion funktionieren oder noch recht manuell sind. Ich habe ein Bookmarklet geschrieben, das ein Bookmarklet generiert (das modifizierten Code aus der Antwort von @ raphinesse enthält). Mein Lesezeichen ist hier: https://github.com/GlenCoakley/createFormSubmittingBookmarklets .

Tal
quelle