![将 HTTP POST 请求存储在书签中或类似 GET 请求的内容中](https://linux22.com/image/1315284/%E5%B0%86%20HTTP%20POST%20%E8%AF%B7%E6%B1%82%E5%AD%98%E5%82%A8%E5%9C%A8%E4%B9%A6%E7%AD%BE%E4%B8%AD%E6%88%96%E7%B1%BB%E4%BC%BC%20GET%20%E8%AF%B7%E6%B1%82%E7%9A%84%E5%86%85%E5%AE%B9%E4%B8%AD.png)
您可以使用如下 GET 请求来存储书签:
http://url.com/service?variable=value
你能在 Chrome 中以某种方式存储 POST 请求吗?也许用插件?或者在 Firefox 中?
我的想法是将其存储在书签中并快速触发它,而不必每次都填写表格。
答案1
您可以创建一个书签小工具当点击时,使用 JavaScript 发送 POST 请求。
以下代码通过将表单附加到当前活动页面然后提交来foo=bar
发送带有有效负载的 POST 请求:https://example.com
post('https://example.com', { foo: 'bar' })
function post (url, formData) {
const h = (tag, props) => Object.assign(document.createElement(tag), props)
const form = h('form', { action: url, method: 'post', hidden: true })
for (const [name, value] of Object.entries(formData)) {
form.appendChild(h('input', { name, value }))
}
document.body.appendChild(form)
form.submit()
}
要将其用作书签,只需将以下内容设置为书签的目标(适当替换 URL 和表单数据):
javascript:post('https://example.com',{foo:'bar'});function post(a,b){const c=(e,f)=>Object.assign(document.createElement(e),f),d=c('form',{action:a,method:'post',hidden:true});for(const[e,f]of Object.entries(b))d.appendChild(c('input',{name:e,value:f}));document.body.appendChild(d),d.submit()}
其后javascript:
紧接着的是上述代码的简化版本。
答案2
我的想法是将其存储在书签中并快速触发它,而不必每次都填写表格。
为此,可以使用以下 HTML 页面。它应该可以在大多数浏览器中运行。
<html>
<head>
<title>getToPost</title>
<script>
function getToPost()
{
var form = document.getElementsByTagName('form')[0];
form.style.visibility = 'hidden';
form.action = document.location.hash.substr(1);
var search = decodeURIComponent(document.location.search);
search = search.substr(1).split('&');
for(var i = 0, j = search.length, input; i < j; i++)
{
input = document.createElement('input');
search[i] = search[i].split('=');
input.name = search[i][0];
input.value = search[i][1];
form.appendChild(input);
}
form.submit();
}
</script>
</head>
<body onload="getToPost()">
<form method="POST"></form>
</body>
</html>
将其另存为C:\getToPost
,您可以收藏以下 URL:
file:///C:/getToPost?name1=value1&name2=value2#http://url.com/service
您将能够按字面意思使用名称或值中的大多数字符。照常对以下内容进行编码:
# -> %23
% -> %25
& -> %26
= -> %3D
答案3
如果寻找一种不需要依赖附加组件或外部文件的跨浏览器解决方案,可以直接将 Javascript 放在书签中来实现这一点,使用以下语法:
javascript:(function(){ <Your Javascript code goes here> })();
借用 Denis 的答案中的一些代码来说明:
javascript:(function()
{
var form = document.getElementsByTagName('form')[0];
form.style.visibility = 'hidden';
form.method = 'post';
form.action = 'https://your.urlgoes.here/build?delay=0sec';
var search = 'name=ENVIRONMENT&value=production&name=DEPLOYTYPE&value=Incremental&name=BRANCH&value=master&statusCode=303&redirectTo=.&json={"parameter": [{"name": "ENVIRONMENT", "value": "production"}, {"name": "DEPLOYTYPE", "value": "Incremental"}, {"name": "BRANCH", "value": "master"}], "statusCode": "303", "redirectTo": "."}&Submit=Build';
search = search.substr(1).split('&');
for(var i = 0, j = search.length, input; i < j; i++)
{
input = document.createElement('input');
search[i] = search[i].split('=');
input.name = search[i][0];
input.value = search[i][1];
form.appendChild(input);
}
form.submit();}
)();
缺点是所有这些都必须放在一行上,因为书签是单行的,所以操作起来可能有点费脑筋。以下是书签本身的内容:
javascript:(function(){ var form = document.getElementsByTagName('form')[0]; form.style.visibility = 'hidden'; form.method = 'post'; form.action = 'https://your.urlgoes.here/build?delay=0sec'; var search = 'name=ENVIRONMENT&value=production&name=DEPLOYTYPE&value=Incremental&name=BRANCH&value=master&statusCode=303&redirectTo=.&json={"parameter": [{"name": "ENVIRONMENT", "value": "production"}, {"name": "DEPLOYTYPE", "value": "Incremental"}, {"name": "BRANCH", "value": "master"}], "statusCode": "303", "redirectTo": "."}&Submit=Build'; search = search.substr(1).split('&'); for(var i = 0, j = search.length, input; i < j; i++) { input = document.createElement('input'); search[i] = search[i].split('='); input.name = search[i][0]; input.value = search[i][1]; form.appendChild(input); } form.submit(); })();
可以使用多个空格轻松转换为更易读的内容并恢复为单行。在上面的例子中,可以在 Notepad++ 等程序中将“ ”替换为 \r\n,以将其恢复为多行。然后,要将其恢复为单行,请查找并替换 \r\n 并将其替换为“ ”,将其恢复为单行。这让它变得不那么费脑筋了……
答案4
我知道这是一个老问题,但有一个公认的答案。但是,这个答案非常手动,需要用户进行 javascript 编程。还列出了其他浏览器附加组件/扩展/插件,但它们不适用于最新版本的浏览器,或者仍然非常手动。我编写了一个书签,可以生成书签(其中包括来自 @raphinesse 答案的修改代码)。我的书签在这里: https://github.com/GlenCoakley/createFormSubmittingBookmarklets。