it-swarm.com.de

Wie erzwingen Sie die Verwendung eines Webbrowsers POST wann bekomme ich eine URL?

Wie zwingen Sie einen Webbrowser zur Verwendung von POST, wenn Sie eine URL erhalten?

34

Verwenden Sie ein HTML-Formular, das post als Methode angibt:

<form method="post" action="/my/url/">
    ...
    <input type="submit" name="submit" value="Submit using POST" />
</form>

Wenn Sie hatten, um es als Link ausführen zu lassen (nicht empfohlen), könnten Sie einen onclick-Handler haben, der dynamisch ein Formular erstellt und sendet.

<script type="text/javascript">
function submitAsPost(url) {
    var postForm = document.createElement('form');
    postForm.action = url;
    postForm.method = 'post';
    var bodyTag = document.getElementsByTagName('body')[0];
    bodyTag.appendChild(postForm);
    postForm.submit();
}
</script>
<a href="/my/url" onclick="submitAsPost(this.href); return false;">this is my post link</a>

Wenn Sie dies auf der Serverseite erzwingen müssen, sollten Sie die HTTP-Methode überprüfen. Wenn sie nicht dem POST entspricht, senden Sie einen HTTP 405-Antwortcode (Methode nicht zulässig) an den Browser zurück und beenden Sie das Programm. Wie Sie das genau implementieren, hängt von Ihrer Programmiersprache/Ihrem Rahmen usw. ab.

30
Asaph
<form method="post">

Wenn Sie eine URL abrufen, werden Sie sie abrufen, nicht POST. Sie können sicherlich nicht veranlassen, dass ein Browser eine POST -Anforderung über die Adressleiste ausgibt.

21

Ich habe ein Gefühl von Ihrer Frage, in der Sie hofften, eine Post-Anfrage in die Adressleiste eines Browsers zu senden.

Geben Sie einfach Folgendes in die Adressleiste ein und tauschen Sie den Wert für "action" gegen die gewünschte URL.

data:text/html,<body onload="document.body.firstChild.submit()"><form method="post" action="http://stackoverflow.com">

Es ist eine ungültige HTML-Datei, aber der Browser (zumindest alle, die ich bisher getestet habe) weiß, was Sie meinen, und ich wollte es so kurz wie möglich halten.

Wenn Sie Werte veröffentlichen möchten, hängen Sie so viele Eingaben an, wie Sie möchten, und tauschen Sie den Namen und Wert in den einzelnen Eingaben gegen beliebige Elemente aus.

<input value="[email protected]" name="email">
<input value="passwordsavedinhistory" name="password">

Es ist wichtig zu wissen, dass sensible Informationen, die Sie veröffentlichen, in folgenden Bereichen sichtbar sind:

  • deine Geschichte
  • ihre Adressleiste
  • die automatische Vervollständigung Ihres Browsers.
  • möglicherweise andere Websites, die Sie von derselben Registerkarte aus besuchen
  • wahrscheinlich auch viele andere Dinge

Es ist eine wirklich schlechte Methode, eine Post-Anfrage zu senden, und alle anderen Antworten sind viel besser, aber es ist trotzdem cool, dass Sie es tun können.

10
Ryan White

Wenn Sie versuchen, etwas zu testen, empfehle ich die Verwendung von Fiddler , um Ihre http-Anforderungen zu erstellen. Sie können damit das Aktionsverb (GET, POST, PUT, DELETE usw.) sowie den Inhalt der Inhalte angeben. Wenn Sie versuchen, eine bestimmte Anforderung über einen Link zu testen, stattdessen mit POST, können Sie die Anforderungen Ihres Browsers überwachen und nur mit der geänderten Aktion POST erneut ausgeben.

4
user199845

sie können keinen Webbrowser dazu zwingen, die URL mit der Kopfzeile POST zu senden. Um jedoch eine POST - Anforderungs-URL zu testen, kann ich die Erweiterung "POSTER" von chrome und mozilla

4
yeakbaba

Die oben genannte submitAsPost () - Funktion ist eine gute und elegante Lösung, hat jedoch ein Problem: Wenn die URL zu lang ist, geben einige Browser (einschließlich Firefox und IE) einen Fehler zurück. Da viele von uns POST verwenden, um diese Einschränkung zu umgehen, schlage ich folgende Lösung vor:

// submit a URL using post
function submitAsPost(url) {
    var bodyTag = document.getElementsByTagName('body')[0];
    var postForm = document.createElement('form');
    bodyTag.appendChild(postForm);
    postForm.method = 'POST';

    var serverAndParams = url.split("?");
    postForm.action = serverAndParams[0];
    var params = null;
    try
    {
      var paramsAndHash = serverAndParams[1].split("#");
      params = paramsAndHash[0]; 
      var attrList = params.split("&");
      for (var i = 0; i < attrList.length; i++)
      {
        try
        {
          var keyValue = attrList[i].split("=");
          var el = document.createElement('input');
          el.type="hidden";
          el.name=keyValue[0];
          var value = keyValue[1];
          value = value.replace(/\+/g, ' ');
          el.value=decodeURIComponent(value);
          postForm.appendChild(el);
        }
        catch(error){}
      } 
    }
    catch(error){}

    postForm.submit();
    bodyTag.removeChild(postForm);
}

Getestet mit Firefox, Chrome und IE. 

3
Gregory

Sie können ein Tool zum Testen verwenden. Ich stelle immer die gleiche Frage wie du. Es gibt einige Tools, die online verfügbar sind. Hier ist das Werkzeug, das ich verwende: http://www.hurl.it/

2
MarkZ

Ich weiß, dass diese Frage alt ist, aber jemand kann dies nützlich finden. Sie können ein Befehlszeilentool wie cURL ( http://curl.haxx.se/ ) verwenden, um Beiträge an eine URL zu senden.

Beispiel:

curl -v  --basic --user username:password --request POST "http://www.theurltopostto.com"
1
Adam

Dies ist etwas spät im Spiel, aber ich bin darauf gestoßen und habe festgestellt, dass HTML 5 einige Änderungen vorgenommen hat. Sie können das Eingabe-Tag verwenden, um die Formularmethode hinzuzufügen (und so den Beitrag auszuwählen). Das hat bei mir funktioniert.

siehe: http://www.w3schools.com/tags/att_input_formmethod.asp

1
Rodney

Wenn Sie das Problem hatten:

request.open('POST',url,true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send("data="+JSON.stringify(data));

und in dev tools ist es immer noch ein GET, dann bedeutet das, dass Ihre URL das folgende Format hat:

http://example.com/ordner

Das heißt es sollte sein:

http://example.com/folder/

Es ist ein sehr bizarrer Fehler, der vielleicht nicht mit Ihrer Frage zusammenhängt, aber ich hatte ihn ein paar Mal und es sollte da draußen sein, da er ernsthaft gefährlich aussieht. Dies ist mir bei der Verwendung eines Apache 2-Servers unter Ubuntu 14.04 mit nicht viel Konfiguration passiert.

0
zardilior

Das Dienstprogramm " Fiddler " von Telerik (kostenlose Software) ermöglicht es Ihnen, eine http-Anfrage zu "verfassen" und sie mit einer beliebigen Methode zu senden (Get, Post, Put, Del usw.) Detaillierte Informationen zu der Anforderung und der Antwort, die beim Testen und Debuggen sehr hilfreich sein können 

0
Cos Callis