Как заставить веб-браузер использовать POST при получении URL-адреса?

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

  •  22-07-2019
  •  | 
  •  

Вопрос

Как заставить веб-браузер использовать POST при получении URL-адреса?

Это было полезно?

Решение

Используйте HTML-форму, в которой в качестве метода указывается post:

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

Если у вас было сделать это ссылкой (не рекомендуется), вы можете иметь обработчик onclick для динамического создания формы и отправки ее.

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

Если вам нужно применить это на стороне сервера, вы должны проверить метод HTTP и, если он не равен POST, отправить Код ответа HTTP 405 (метод не разрешен) вернуться в браузер и выйти. Как именно вы это реализуете, будет зависеть от вашего языка программирования / фреймворка и т. Д.

Другие советы

<form method="post">

Если вы получаете URL, вы получаете его, а не размещаете. Вы, конечно, не можете заставить браузер выдавать POST-запрос через его адресную строку.

Из вашего вопроса у меня сложилось впечатление, что вы просто надеялись отправить запрос post в адресной строке браузера.

Просто введите следующее в адресную строку, заменив значение "действие" на URL, который вам нравится.

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

Это недопустимый html, но браузеры (по крайней мере, все те, в которых я его тестировал до сих пор) знают, что вы имеете в виду, и я хотел сделать его как можно короче.

Если вы хотите публиковать значения, добавляйте столько входных данных, сколько вам нравится, меняя имя и значение в каждом вводе местами на то, что вам нравится.

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

Важно отметить, что конфиденциальная информация, которую вы публикуете, будет видна в:

  • ваша история
  • ваша адресная строка
  • автозаполнение вашего браузера.
  • возможно, другие сайты, которые вы посещаете с той же вкладки
  • вероятно, и множество других вещей тоже

Это действительно плохой способ отправить post-запрос, и все остальные ответы намного лучше, но все равно здорово, что вы можете это сделать.

Если вы пытаетесь что-то протестировать, я бы предложил использовать Fiddler для создания ваших http-запросов. , Это позволит вам указать глагол действия (GET, POST, PUT, DELETE и т. Д.), А также запросить содержимое. Если вы пытаетесь протестировать очень специфический запрос по ссылке, но вместо этого с помощью POST, вы можете отслеживать запросы, которые делает ваш браузер, и переиздавать его только с измененным действием POST.

Вы не можете заставить любой веб-браузер отправлять URL с заголовком POST. Но чтобы проверить URL запроса POST, я могу предложить " POSTER " расширение rel="nofollow"> chrome и mozilla

Вышеупомянутая функция submitAsPost () является хорошим и элегантным решением, но у нее есть проблема - если URL слишком длинный, некоторые браузеры (включая Firefox и IE) возвращают ошибку. Поскольку многие из нас используют POST, чтобы обойти это ограничение, я предлагаю следующее решение:

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

Протестировано с Firefox, Chrome и IE.

Вы можете использовать инструмент для тестирования. Я всегда задаю тот же вопрос, что и вы. В Интернете доступно довольно много инструментов. Вот инструмент, который я использую: http://www.hurl.it/

Я знаю, что этот вопрос устарел, но кто-то может счесть это полезным.Вы можете использовать инструмент командной строки, такой как cURL (http://curl.haxx.se/) для публикации по URL-адресу.

Пример:

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

Это немного поздно в игре, но я наткнулся на это и обнаружил, что HTML 5 внес некоторые изменения. Вы можете использовать входной тег, чтобы добавить formmethod (таким образом, выбирая сообщение). Это сработало для меня.

см. http://www.w3schools.com/tags/att_input_formmethod.asp

Если у вас возникла проблема с выполнением:

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

и в инструментах разработки вы все еще видите, что он выполняет GET, это означает, что ваш URL-адрес имеет следующий формат:

http://example.com/folder

Значение должно быть следующим:

http://example.com/folder/

Это очень странная ошибка, возможно, не связанная с вашим вопросом, но у меня она была пару раз, и она должна быть там, потому что это выглядит очень опасно. Это случилось со мной при использовании сервера Apache 2 в Ubuntu 14.04 с небольшой конфигурацией.

Утилита " Fiddler " Telerik (бесплатная программа) позволяет вам «создавать» запрос http и отправка его любым выбранным вами способом (Get, Post, Put, Del и т. д.). Он также предоставит вам очень подробную информацию о запросе и ответ, который может быть очень полезен при тестировании и отладке

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top