Как заставить веб-браузер использовать POST при получении URL-адреса? - PullRequest
36 голосов
/ 30 октября 2009

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

Ответы [ 11 ]

31 голосов
/ 30 октября 2009

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

<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 (метод не разрешен) обратно в браузер и выход. Как именно вы это реализуете, будет зависеть от вашего языка программирования / фреймворка и т. Д.

21 голосов
/ 30 октября 2009
<form method="post">

Если вы ПОЛУЧАЕТЕ URL, вы ПОЛУЧАЕТЕ его, а не ПОСТАВЛЯЕТЕ его. Вы, конечно, не можете заставить браузер выдавать POST-запрос через его адресную строку.

10 голосов
/ 20 декабря 2015

По вашему вопросу у меня возникло ощущение, что вы просто надеялись отправить запрос на публикацию в адресной строке браузера.

Просто введите следующее в адресную строку, поменяв значение для action на 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">

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

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

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

4 голосов
/ 03 мая 2013

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

4 голосов
/ 30 октября 2009

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

3 голосов
/ 27 августа 2013

Вышеупомянутая функция 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.

2 голосов
/ 24 октября 2014

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

1 голос
/ 28 мая 2014

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

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

1 голос
/ 23 августа 2013

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

Пример:

curl -v  --basic --user username:password --request POST "http://www.theurltopostto.com"
0 голосов
/ 19 июля 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...