Domanda

Come si forza un browser Web a utilizzare POST quando si riceve un URL?

È stato utile?

Soluzione

Utilizza un modulo HTML che specifica post come metodo:

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

Se dovessi farlo accadere come link (sconsigliato), potresti avere un gestore onclick che crea dinamicamente un modulo e lo invia.

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

Se è necessario applicarlo sul lato server, è necessario controllare il metodo HTTP e, se non è uguale a POST, inviare un codice di risposta HTTP 405 (metodo non consentito) torna al browser ed esce. Esattamente come implementerai ciò dipenderà dal tuo linguaggio / framework di programmazione, ecc.

Altri suggerimenti

<form method="post">

Se stai ricevendo un URL, lo stai ottenendo, non POST. Non puoi certo fare in modo che un browser emetta una richiesta POST tramite la sua barra della posizione.

Ho la sensazione che tu stia solo sperando di inviare una richiesta di post nella barra degli indirizzi del browser.

Basta digitare quanto segue nella barra degli indirizzi scambiando il valore di 'action' con l'URL che ti piace.

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

È html non valido, ma i browser (almeno tutti quelli in cui l'ho provato finora) sanno cosa intendi e volevo mantenerlo il più corto possibile.

Se vuoi pubblicare valori, aggiungi tutti gli input che vuoi, scambiando nome e valore in ogni input per quello che ti piace.

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

È importante notare che le informazioni sensibili che pubblichi saranno visibili in:

  • la tua storia
  • la barra degli indirizzi
  • completamento automatico del browser.
  • probabilmente altri siti che visiti dalla stessa scheda
  • probabilmente anche molte altre cose

È davvero un brutto modo per inviare una richiesta di post e tutte le altre risposte sono molto migliori, ma è comunque bello poterlo fare.

Se stai provando a provare qualcosa, ti suggerirei di utilizzare Fiddler per creare le tue richieste http . Ti permetterà di specificare il verbo di azione (GET, POST, PUT, DELETE, ecc.) Così come i contenuti della richiesta. Se stai provando a testare una richiesta molto specifica da un link ma con POST invece, puoi monitorare le richieste del tuo browser e riemetterla solo con l'azione POST modificata.

non è possibile forzare alcun browser Web a inviare l'URL con l'intestazione POST. Ma per testare l'URL di una richiesta POST, posso suggerire " POSTER " estensione di chrome e mozilla

La funzione submitAsPost () sopra è una soluzione valida ed elegante ma ha un problema - se l'URL è troppo lungo alcuni browser (inclusi Firefox e IE) restituiranno un errore. Poiché molti di noi usano POST per aggirare questa limitazione, suggerisco questa soluzione:

// 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);
}

Testato con Firefox, Chrome e IE.

Puoi usare uno strumento per testare. Ti faccio sempre la stessa domanda. Ci sono molti strumenti disponibili online. Ecco lo strumento che utilizzo: http://www.hurl.it/

So che questa domanda è vecchia ma qualcuno potrebbe trovarla utile. Puoi utilizzare uno strumento da riga di comando come cURL ( http://curl.haxx.se/ ) per postare in un URL.

Esempio:

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

Questo è un po 'tardi nel gioco, ma mi sono imbattuto in questo e ho scoperto che HTML 5 ha apportato alcune modifiche. È possibile utilizzare il tag di input per aggiungere formmethod (selezionando quindi post). Questo ha funzionato per me.

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

Se hai avuto il problema di farlo:

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

e negli strumenti di sviluppo continui a vedere che sta facendo un GET, ciò significa che il tuo URL è nel seguente formato:

http://example.com/folder

Significato dovrebbe essere:

http://example.com/folder/

È un errore molto bizzarro forse non correlato alla tua domanda, ma l'ho avuto un paio di volte e dovrebbe essere là fuori perché sembra seriamente pericoloso. Questo mi è successo quando ho usato un server Apache 2 su Ubuntu 14.04, con poca configurazione.

L'utilità " Fiddler " di Telerik (articoli gratuiti) ti consente di "comporre" una richiesta http e inviarla utilizzando qualsiasi metodo tu scelga (Ottieni, Pubblica, Put, Canc, ecc.) Ti fornirà anche alcune informazioni molto dettagliate sulla richiesta e sulla risposta che possono essere molto utili durante il test e il debug

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top