Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

<form method="post">

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

Ответ 3

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

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

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

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

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

<input value="[email protected]" name="email">
<input value="passwordsavedinhistory" name="password">

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Пример:

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

Ответ 9

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

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

Ответ 10

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

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 с небольшой настройкой.