Como você forçar um navegador de internet para usar POST, quando chegar um url?

StackOverflow https://stackoverflow.com/questions/1651197

  •  22-07-2019
  •  | 
  •  

Pergunta

Como você forçar um navegador de internet para usar POST, quando chegar um url?

Foi útil?

Solução

Use um formulário HTML que especifica postar como o método:

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

Se você estiveste para que isso aconteça como um link (não recomendado), você pode ter um manipulador onclick criar dinamicamente um formulário e enviá-lo.

<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 você precisar fazer cumprir esta no lado do servidor, você deve verificar o método HTTP e se não for igual a POST, envie um HTTP 405 código de resposta (método não permitido) volta para o navegador e sair. Exatamente como você implementar isso dependerá de sua linguagem de programação / framework, etc.

Outras dicas

<form method="post">

Se você está recebendo uma URL, você está entendendo, não publicá-la. Você certamente não pode causa um navegador para emitir um pedido POST através da sua barra de localização.

Eu tenho um sentimento de sua pergunta que você estava esperando para enviar um pedido de pós na barra de endereços do navegador.

Apenas digite o seguinte na barra de endereços trocando o valor para 'ação' para a URL que você gosta.

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

É html inválido, mas do navegador (pelo menos todos os que eu testei na medida) sei o que dizer, e eu queria mantê-lo tão curto quanto eu poderia.

Se você quiser adicionar valores, acrescentar como muitos insumos como você gosta, trocando o nome eo valor de cada entrada para o que quiser.

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

É importante notar que as informações confidenciais que você postar será visível em:

  • seu histórico
  • sua barra de endereço
  • autocomplete do seu navegador.
  • possivelmente outros sites que você visita a partir do mesmo guia
  • provavelmente muitas outras coisas também

É uma maneira muito ruim para enviar uma solicitação post, e todas as outras respostas são muito melhores, mas ainda é legal que você pode fazê-lo.

Se você está tentando testar alguma coisa, eu sugiro usar Fiddler para elaborar suas solicitações HTTP . Ele permitirá que você para especificar a ação verbo (GET, POST, PUT, DELETE, etc), bem como o conteúdo da solicitação. Se você está tentando testar um pedido muito específico a partir de um link, mas com POST em vez disso, então você pode monitorar os pedidos seu navegador está fazendo e emita novamente apenas com a ação POST modificado.

Você não pode forçar qualquer navegador web para enviar a URL com POST cabeçalho. Mas, para testar uma url pedido POST, posso sugerir extensão "POSTER" do cromo e mozilla

A função acima submitAsPost () é uma boa e solução elegante, mas tem um problema - se o URL é muito longo alguns navegadores (incluindo o Firefox e IE) retornará um erro. Uma vez que muitos de nós usamos POST a fim de contornar esta limitação muito, eu sugiro que esta solução:

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

Testado com Firefox, Chrome e IE.

Você pode usar uma ferramenta para teste. Estou sempre fazendo a mesma pergunta como você. Há algumas ferramentas bastante disponíveis on-line. Aqui é a ferramenta que eu uso: http://www.hurl.it/

Eu sei que esta questão é antiga, mas alguém pode encontrar este útil. Você pode usar uma ferramenta de linha de comando como cURL ( http://curl.haxx.se/ ) para postar uma URL.

Exemplo:

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

Este é um pouco tarde no jogo, mas eu corri em toda esta e descobriu que HTML 5 fez algumas mudanças. Você pode usar a tag de entrada para adicionar formmethod (selecionando assim post). Isso funcionou para mim.

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

Se você tivesse o problema de fazer:

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

e em ferramentas dev você ainda Sé está fazendo um GET, então isso significa que o seu url está no seguinte formato:

http://example.com/folder

O que significa que deve ser:

http://example.com/folder/

É um erro muito bizarro talvez não relacionados com a sua pergunta, mas eu tive um par de vezes e ele deve estar lá fora, como parece muito perigoso. Isso aconteceu comigo quando se utiliza um servidor Apache 2 no Ubuntu 14.04, com não muito configuração.

O utilitário " Fiddler " por Telerik (utensílios livre) permite que você "compor" uma http pedido e enviá-lo usando qualquer método que você escolher (Get, Post, Put, Del, etc) ele também irá dar-lhe algumas informações muito detalhadas sobre o pedido e a resposta que pode ser muito útil durante os testes e depuração

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top