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

Dan*_*nos 37 html url post get

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

Asa*_*aph 31

使用指定post作为方法的HTML表单:

<form method="post" action="/my/url/">
    ...
    <input type="submit" name="submit" value="Submit using POST" />
</form>
Run Code Online (Sandbox Code Playgroud)

如果您必须将其作为链接(不推荐)发生,您可以使用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>
Run Code Online (Sandbox Code Playgroud)

如果需要在服务器端强制执行此操作,则应检查HTTP方法,如果它不等于POST,则将HTTP 405响应代码(不允许的方法)发送回浏览器并退出.具体如何实现将取决于您的编程语言/框架等.

  • @RosdiKasim我知道这是一个旧的评论,但不建议这样做,因为它打破了万维网的语义.链接应该是[幂等](https://en.wikipedia.org/wiki/Idempotence)GET请求.使他们的POST违反了这种期望.打破网络的方法之一是搜索引擎抓取工具,它们尽量不提交表单,因此不会导致数据库更新等. (2认同)

Jon*_*erg 21

<form method="post">
Run Code Online (Sandbox Code Playgroud)

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

  • 没有办法在 URL 地址栏中 POST 吗? (2认同)
  • @Daniel:我更新了我的答案,提供了一种从链接提交帖子表单的hacky方式. (2认同)
  • 瑞安·怀特(Ryan White)的答案可以从位置栏中发送POST。 (2认同)

Rya*_*ite 14

我从你的问题中感觉到你只是希望在浏览器的地址栏中发送一个帖子请求.

只需在地址栏中输入以下内容,即可将"操作"的值交换到您喜欢的网址.

data:text/html,<body onload="document.body.firstChild.submit()"><form method="post" action="http://stackoverflow.com">
Run Code Online (Sandbox Code Playgroud)

这是无效的HTML,但浏览器(至少我到目前为止测试过的所有)知道你的意思,我想尽可能地保持它.

如果要发布值,请根据需要添加任意数量的输入,在每个输入中交换名称和值,以满足您的任何需要.

<input value="hugh.mahn@person.com" name="email">
<input value="passwordsavedinhistory" name="password">
Run Code Online (Sandbox Code Playgroud)

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

  • 你的历史
  • 你的地址栏
  • 您的浏览器的自动填充功能.
  • 可能是您从同一个标签访问的其他网站
  • 可能还有很多其他的东西

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