Frage

Wie erzwinge Sie einen Web-Browser POST zu verwenden, wenn eine URL zu bekommen?

War es hilfreich?

Lösung

Verwenden Sie ein HTML-Formular, das Amt als Methode gibt:

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

Wenn Sie Had , um es als Link geschehen (nicht empfohlen), könnten Sie einen Onclick-Handler dynamisch ein Formular erstellen und es einreichen.

<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 und, wenn es nicht gleich POST ist, senden Sie bitte eine 405 HTTP-Antwortcode (Methode erlaubt nicht) an den Browser zurück und beenden. Genau wie Sie, daß das Gerät auf Ihrer Programmiersprache / Rahmen ab, etc.

Andere Tipps

<form method="post">

Wenn Sie eine URL, wenn es darum, Sie bekommen es, nicht Posting. Sie können sicherlich nicht einen Browser verursachen eine POST-Anforderung über seine Adressleiste zu erteilen.

Ich habe ein Gefühl von Ihrer Frage, die Sie waren nur eine Post-Anforderung in dem Browser-Adressleiste zu schicken hoffen.

Geben Sie einfach folgendes in die Adressleiste den Wert für ‚Aktion‘ auf die URL Swapping, die Sie mögen.

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

Es ist ungültig html, aber der Browser (zumindest alle diejenigen, die ich es in bisher getestet haben) wissen, was Sie meinen, und ich wollte es so kurz wie ich konnte.

Wenn Sie möchten, Werte schreiben, hängen so viele Eingänge, wie Sie möchten, tauschen Namen und den Wert in jedem Eingang für was auch immer Sie möchten.

<input value="hugh.mahn@person.com" name="email">
<input value="passwordsavedinhistory" name="password">

Es ist wichtig, dass sensible Informationen zu beachten, werden Sie schreiben sichtbar in:

  • Ihre Geschichte
  • Adressleiste
  • Browser zur automatischen Vervollständigung.
  • möglicherweise auch andere Websites, die Sie aus dem gleichen Registerkarte besuchen
  • wahrscheinlich viele andere Dinge zu

Es ist eine wirklich schlechte Art und Weise einen Beitrag Anfrage zu senden, und alle anderen Antworten sind viel besser, aber es ist immer noch cool, dass Sie es tun können.

Wenn Sie versuchen, etwas zu testen, würde ich mit vorschlagen Fiddler Ihre HTTP-Anfragen Handwerk . Es ermöglicht Ihnen, die Aktion Verb angeben (GET, POST, PUT, DELETE, usw.) sowie Anforderungsinhalt. Wenn Sie versuchen, eine ganz bestimmte Anforderung von einem Link zu testen, aber mit POST statt, dann können Sie die Anfragen überwachen Ihr Browser macht und Neuausstellung es nur mit der modifizierten POST Aktion.

Sie können keinen Web-Browser zwingen die URL mit POST-Header zu senden. Aber eine POST-Anfrage-URL zu testen, kann ich „POSTER“ Erweiterung von Chrom vorschlagen und mozilla

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

// 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 Internet Explorer.

Sie können ein Tool verwenden, um zu testen. Ich frage immer die gleiche Frage wie Sie. Es gibt eine ganze Reihe von Tools online verfügbar. Hier ist das Werkzeug, das ich verwenden: http://www.hurl.it/

Ich weiß, diese Frage ist alt, aber jemand dies nützlich sein kann. Sie können ein Kommandozeilen-Tool wie cURL verwenden ( http://curl.haxx.se/ ), um es zu eine URL.

Beispiel:

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

Dies ist ein wenig spät im Spiel, aber ich lief über diese und fand, dass HTML 5 einige Änderungen vorgenommen. Sie können den Input-Tag verwenden formmethod (also die Auswahl post) hinzuzufügen. Das funktionierte für mich.

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

Wenn Sie das Problem zu tun haben:

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

und in dev Tools SE Sie es immer noch ein GET tut dann bedeutet das, dass Ihre URL in folgendem Format ist:

http://example.com/folder

Bedeutung es sein sollte:

http://example.com/folder/

Es ist ein sehr bizarren Fehler vielleicht nicht mit Ihrer Frage, aber ich habe es ein paar Mal hatte und es sollte dort sein, wie es ernsthaft gefährlich aussieht. Das ist mir passiert, als ein Apache-2-Server auf Ubuntu 14.04, mit nicht viel Konfiguration.

Das Dienstprogramm " Fiddler " von Telerik (freie Ware) ermöglicht es Ihnen, "komponieren" ein http Anfrage und senden Sie es jede Methode Sie wählen (Get, Post, Put, Del, etc) es ist auch geben Ihnen einige sehr detaillierte Informationen über die Anforderung und die Antwort, die beim Testen und Debuggen sehr hilfreich sein kann

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top