Как заставить веб-браузер использовать POST при получении URL-адреса?
Вопрос
Как заставить веб-браузер использовать 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-адрес имеет следующий формат:
Значение должно быть следующим:
Это очень странная ошибка, возможно, не связанная с вашим вопросом, но у меня она была пару раз, и она должна быть там, потому что это выглядит очень опасно. Это случилось со мной при использовании сервера Apache 2 в Ubuntu 14.04 с небольшой конфигурацией.
Утилита " Fiddler " Telerik (бесплатная программа) позволяет вам «создавать» запрос http и отправка его любым выбранным вами способом (Get, Post, Put, Del и т. д.). Он также предоставит вам очень подробную информацию о запросе и ответ, который может быть очень полезен при тестировании и отладке