获取网址时如何强制Web浏览器使用POST?

时间:2009-10-30 17:22:22

标签: html url post get

获取网址时如何强制网络浏览器使用POST?

10 个答案:

答案 0 :(得分:31)

使用指定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)发送回浏览器并退出。具体如何实现将取决于您的编程语言/框架等。

答案 1 :(得分:21)

<form method="post">

如果你正在获取一个URL,你就是在进行它,而不是发布它。您当然不能让浏览器通过其位置栏发出POST请求。

答案 2 :(得分:4)

如果您正在尝试测试某些内容,我建议您使用Fiddler来制作您的http请求。它允许您指定动作动词(GET,POST,PUT,DELETE等)以及请求内容。如果您尝试从链接测试非常具体的请求,而不是使用POST,则可以监视浏览器发出的请求,并仅使用修改后的POST操作重新发出请求。

答案 3 :(得分:4)

您无法强制任何网络浏览器使用POST标头发送网址。但是为了测试POST请求网址,我可以建议chromemozilla

的“海报”扩展

答案 4 :(得分:3)

上面的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进行测试。

答案 5 :(得分:2)

您可以使用工具进行测试。我总是问你一样的问题。网上有很多工具可供使用。以下是我使用的工具:http://www.hurl.it/

答案 6 :(得分:1)

我知道这个问题很老但有人可能觉得这很有用。您可以使用命令行工具(如cURL(http://curl.haxx.se/))发布到URL。

示例:

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

答案 7 :(得分:1)

这在游戏中有点晚,但我遇到了这个问题,发现HTML 5做了一些改动。您可以使用输入标记添加formmethod(从而选择post)。这对我有用。

请参阅:http://www.w3schools.com/tags/att_input_formmethod.asp

答案 8 :(得分:0)

如果您遇到以下问题:

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

并且在开发工具中你仍然可以进行GET,这意味着你的网址采用以下格式:

http://example.com/folder

意思应该是:

http://example.com/folder/

这是一个非常奇怪的错误,可能与你的问题没有关系,但我曾经有过几次这样的错误,因为它看起来非常危险。在Ubuntu 14.04上使用apache 2服务器时,这种情况发生在我身上,配置不多。

答案 9 :(得分:0)

Telerik(免费软件)的实用程序“ Fiddler”使您可以“撰写” http请求,并使用您选择的任何方法(获取,发布,放置,删除等)将其发送您将获得有关请求和响应的一些非常详细的信息,这些信息在测试和调试过程中会非常有用