你如何强制Web浏览器来使用POST得到一个URL时?(How do you force a web

2019-09-02 18:55发布

你如何强制Web浏览器来使用POST得到一个URL时?

Answer 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响应代码(方法不允许)返回给浏览器并退出。 究竟如何实现,这将取决于你的编程语言/框架等。



Answer 2:

<form method="post">

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



Answer 3:

我有一种感觉,从你的问题你只是希望发在浏览器的地址栏中post请求。

只需键入以下到地址栏对换“行动”到你喜欢的网址的价值。

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请求一个非常糟糕的方式,和所有其他的答案是更好,但它仍然很酷,你可以做到这一点。



Answer 4:

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



Answer 5:

你不能强迫任何Web浏览器与POST标头中发送的URL。 但是,为了测试一个POST请求的URL,我可以建议的“海报” extention 铬和Mozilla浏览器



Answer 6:

上述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。



Answer 7:

您可以使用一个工具来测试。 我总是问你同样的问题。 有相当多的工具,可在网上。 下面是我使用的工具: http://www.hurl.it/



Answer 8:

我知道这个问题是旧的,但有人可能会发现这很有用。 您可以像使用卷曲(一个命令行工具http://curl.haxx.se/ )张贴到一个URL。

例:

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


Answer 9:

这是一个小游戏后期,但我跑过这个发现HTML 5做了一些改动。 您可以使用输入标签添加formmethod(从而选择后)。 这为我工作。

见: http://www.w3schools.com/tags/att_input_formmethod.asp



Answer 10:

如果你有这样的问题:

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,没有太大的配置这发生在我身上。



Answer 11:

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



文章来源: How do you force a web browser to use POST when getting a url?
标签: html url post get