如何强制 Web 浏览器在获取 url 时使用 POST?

有帮助吗?

解决方案

使用指定 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 响应代码(不允许的方法) 返回浏览器并退出。具体如何实现取决于您的编程语言/框架等。

其他提示

<form method="post">

如果你得到一个URL,你得到它,而不是张贴。你当然不会引起浏览器发出通过其地址栏POST请求。

从您的问题中我感觉到您只是希望在浏览器的地址栏中发送发布请求。

只需在地址栏中输入以下内容,将“action”的值替换为您喜欢的网址即可。

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">

请务必注意,您发布的敏感信息将在以下位置可见:

  • 你的历史
  • 你的地址栏
  • 您的浏览器的自动完成功能。
  • 可能是您从同一选项卡访问的其他网站
  • 可能还有很多其他的事情

这是发送帖子请求的一种非常糟糕的方式,所有其他答案都好得多,但你能做到这一点仍然很酷。

如果你想测试的东西,我建议使用提琴手的手艺你的http请求。它可以让你指定动作动词(GET,POST,PUT,DELETE等)以及请求的内容。如果你想测试从一个链接一个非常具体的要求,但与POST代替,那么你就可以监视你的浏览器发出请求,只与修改POST操作重新发布。

你不能强迫任何Web浏览器与POST标头中发送的URL。但是,为了测试一个POST请求的URL,我可以建议镀铬的“海报” extention 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这意味着您的网址是按以下格式:

http://example.com/folder

含义应该是:

http://example.com/folder/

它是一种非常奇怪的错误也许不是你的问题相关,但我已经有它几次,它应该是在那里,因为它看起来严重危险。使用Apache服务器2时在Ubuntu 14.04,没有太大的配置这发生在我

该实用程序 “提琴手” 由Telerik的(游离洁具)让你 “撰写” 的HTTP使用任何方法请求并发送你选择(GET,POST,PUT,德尔等),它也会给你有关请求,并且可以测试和调试过程中非常有用的响应一些非常详细的信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top