如何強制Web瀏覽器在獲取URL時使用POST?如何強制Web瀏覽器在獲取URL時使用POST?
回答
使用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 response code (method not allowed)回瀏覽器並退出。究竟如何實現,這將取決於你的編程語言/框架等
我知道這是一個古老的答案,但我可以知道你爲什麼說'不推薦'來強制鏈接提交表單嗎? –
@RosdiKasim我知道這是一箇舊的評論,但它不被推薦,因爲它打破了萬維網的語義。預計鏈接是[冪等](https://en.wikipedia.org/wiki/Idempotence)GET請求。使他們發佈違反了這種期望。這種打破網絡的方式之一就是對於試圖不提交表單的搜索引擎爬蟲來說,它們不會導致數據庫被更新等。 – Asaph
<form method="post">
如果你得到一個URL,你得到它,而不是張貼。您肯定不會導致瀏覽器通過其地址欄發出POST請求。
如果你想測試的東西,我建議使用Fiddler手藝你的HTTP請求。它將允許您指定動作動詞(GET,POST,PUT,DELETE等)以及請求內容。如果您試圖從鏈接測試一個非常具體的請求,但使用POST來測試,那麼您可以監視瀏覽器正在發出的請求,並且只有使用修改後的POST操作才能重新發出請求。
我知道這個問題很老,但有人會覺得這很有用。您可以使用命令行工具(如cURL(http://curl.haxx.se/))發佈到URL。
例子:
curl -v --basic --user username:password --request POST "http://www.theurltopostto.com"
上述submitAsPost()函數是一個很好的和優雅的解決方案,但它有一個問題 - 如果網址太長,一些瀏覽器(包括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。
這是一個小遊戲後期,但我跑過這個發現HTML 5做了一些改動。您可以使用輸入標籤添加formmethod(從而選擇發佈)。這對我有效。
您可以使用一個工具來測試。我一直在問你同樣的問題。網上有很多可用的工具。下面是我使用的工具:http://www.hurl.it/
我從你的問題感覺你只是希望發在瀏覽器的地址欄中post請求。
只需鍵入以下到地址欄對換「行動」到你喜歡的網址的價值。
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">
重要的是要注意,您發佈的內容會在可見的敏感信息是非常重要的。
- 您從同一選項卡瀏覽
- 可能很多其他的東西太多
這是一個非常糟糕的方式發送POST請求,和所有其他的答案是更好,但它可能是其他網站仍然很酷,你可以做到這一點。
如果你有這樣的問題:
request.open('POST',url,true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send("data="+JSON.stringify(data));
和開發工具,你仍然瑟它是做一個GET那麼這意味着你的網址是按以下格式:
含義應該是:
它的一個非常奇怪的錯誤也許與你的問題沒有關係,但我已經有幾次了,它應該在那裏,因爲它看起來嚴重危險。這發生在我使用Ubuntu 14.04上的apache 2服務器時,沒有太多配置。
- 1. 強制瀏覽器從URL
- 2. VB.NET從Web瀏覽器1獲取URL
- 3. 如何從Safari瀏覽器獲取URL
- 4. 獲取當前的web瀏覽器的URL或web瀏覽器的內容
- 5. 從瀏覽器獲取URL
- 6. Liferay獲取瀏覽器URL
- 7. 的Python:Web瀏覽器的更改URL中使用web瀏覽器控制
- 8. 如何從瀏覽器(Mozilla/IE)使用C#獲取URL地址?
- 9. 如何使用JavaScript獲取當前瀏覽器的URL?
- 10. 如何使用AutoHotKey腳本獲取當前的瀏覽器URL?
- 11. 如何使用JavaScript獲取瀏覽器URL歷史記錄?
- 12. 如何在Apache-Tomcat Web應用程序中獲取瀏覽器URL?
- 13. 如何在瀏覽器中強制使用UTF-8編碼?
- 14. 如何使用Web瀏覽器測試Spring MVC的HTTP POST?
- 15. 如何使用用戶提供的URL調用Web瀏覽器?
- 16. 如何強制瀏覽器更新其基本URL
- 17. 如何強制Web瀏覽器緩存圖像
- 18. 強制瀏覽器下載
- 19. 如何在加載時強制瀏覽器顯示
- 20. 強制瀏覽
- 21. IE瀏覽器:如何使用window.open(url)
- 22. 如何從Web瀏覽器控制
- 23. 如何使用codeigniter在Web瀏覽器中讀取word文件
- 24. 從android瀏覽器獲取url
- 25. Haskell通過瀏覽器獲取URL
- 26. Wicket:從瀏覽器獲取URL
- 27. 從手機瀏覽器獲取URL?
- 28. 從網絡瀏覽器中獲取url
- 29. 獲取瀏覽器的URL與jQuery
- 30. JavaScript:如何強制Image()不使用瀏覽器緩存?
你是指從窗體或href? –
你真的想用這個完成什麼? 「發佈」通常用於將某些數據從客戶端發送到服務器。 「獲取」是檢索數據..但瀏覽器本身發送一些數據爲那些,如餅乾,瀏覽器信息等 – NotMe
我有同樣的問題,我發佈到URL使用xmlhttprequest和它得到 – zardilior