将HTTP POST请求存储在书签或类似于GET请求的内容中


26

您可以使用以下GET请求存储书签:

http://url.com/service?variable=value

您可以通过某种方式在Chrome中存储POST请求吗?也许有一个插件?还是在Firefox中?

我的想法是将其存储在书签中并快速将其触发,而不必每次都填写表格。



1
根据您的操作系统,您可能需要使用curl发送该文件中的POST请求,而不是
slhck


检出Greasemonkey扩展名,可用于FF和Chrome。
ott-- 2012年

Answers:


17

我的想法是将其存储在书签中并快速将其触发,而不必每次都填写表格。

为此,下面的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

这已经在一个站点上正常工作了,谢谢!但是,对于另一个使用AJAX的网站(我认为),它仍然无法正常工作(我可能做错了);如果get / post-thing由AJAX处理,会有什么改变吗?
关于坚果的坚果,

6

如果要寻找不需要依赖于加载项或外部文件的跨浏览器解决方案,可以使用以下语法将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();   })();

可以使用许多空格轻松地将其转换为更具可读性的内容并返回到单行。在上面的示例中,“”可以用\ r \ n替换为Notepad ++,以将其转换回多行。然后将其转换回单行,然后查找并替换为\ r \ n并替换为“”,将其转换回单行。这使它的思想弯曲程度略有减少...


3

建立在其他答案上!

该代码的调试版本,以及清理和jsbeautifier.org/。

(function() {
    var ThisAction = 'https://your.urlgoes.here/build?delay=0sec';
    /* A little JSON never hurt anyone */
    var ThisPost = {
        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'
    };

    /* Help us locate this function */
    console.trace();
    /* See what we are looking at */
    console.log(document);
    var form = document.getElementsByTagName('form')[0];
    form.style.visibility = 'hidden';
    form.method = 'post';
    form.action = ThisAction;
    for (var key in ThisPost) {
        if (ThisPost.hasOwnProperty(key)) {
            input = document.createElement('input');
            input.name = key;
            input.value = ThisPost[key];
            form.appendChild(input);
        }
    }
    /* form.submit(); */
})();

显然,如果没有相应的html,则标签名称为“ form”的元素很可能不存在……如果这样的话,情况会更糟。以上很好地说明了这一点。请注意,在Chrome javascript中:URI /书签在新标签中不起作用,您必须先浏览一次。这将填充文档对象,甚至只是javascript:alert('t'); 什么也没做。

我建议以下。

(function() {
    var ThisAction = 'https://your.urlgoes.here/build?optional=uri_get';
    /* A little JSON never hurt anyone */
    var ThisPost = {
        multiple: 'value',
        key: 'pairs',
        or: 'JSON like so...',
        note: 'the double quotes and last item with NO trailing comma.',
        json: '{parameter: [{name: "stuff"}]}'
    };

    var form = document.createElement('form');
    form.style.visibility = 'hidden';
    form.method = 'post';
    form.action = ThisAction;
    for (var key in ThisPost) {
        if (ThisPost.hasOwnProperty(key)) {
            var input = document.createElement('input');
            input.name = key;
            input.value = ThisPost[key];
            form.appendChild(input);
        }
    }
    document.body.appendChild(form);
    form.submit();
})();

删除调试设置,清理示例输入,以更好地了解期望的内容。通过http://jscompress.com/或其他方式运行并获得一行。

!function(){var e="https://your.urlgoes.here/build?optional=uri_get",t={multiple:"value",key:"pairs",or:"JSON like so...",note:"the double quotes and last item with NO trailing comma.",json:'{parameter: [{name: "stuff"}]}'},i=document.createElement("form");i.style.visibility="hidden",i.method="post",i.action=e;for(var o in t)if(t.hasOwnProperty(o)){var a=document.createElement("input");a.name=o,a.value=t[o],i.appendChild(a)}document.body.appendChild(i),i.submit()}();

编辑:提供一个有效的示例。

在美国明尼苏达州明尼阿波利斯市,使用它可以访问免费WiFi ESSID“ USIW免费WiFi”。使用https://login.usiwireless.com/mplsfree/logon.php?originalurl=www.google.com/注册帐户后,出于滥用原因,他们希望使用信用卡。

使用它登录到网络,并进行明显的替换。

javascript:!function(){var e="https://login.usiwireless.com/mplsfree/logon.pl",o={usernameLogin:"USER",passwordLogin:"PASSWORD",originalurl:"www.google.com/"},n=document.createElement("form");n.style.visibility="hidden",n.method="post",n.action=e;for(var i in o)if(o.hasOwnProperty(i)){var t=document.createElement("input");t.name=i,t.value=o[i],n.appendChild(t)}document.body.appendChild(n),n.submit()}();

3

使用现代浏览器功能和ES6的javascript小书签方法的简短版本:

post('https://example.com', {foo: 'bar'})

function post(url, formData) {
  const makeElem = (tag, props) => Object.assign(document.createElement(tag), props)
  const form = makeElem('form', { action: url, method: 'post', style: 'display: none' })
  for (const [name, value] of Object.entries(formData)) {
    form.appendChild(makeElem('input', { name, value }))
  }
  document.body.appendChild(form)
  form.submit()
}

将以下内容设置为书签目标,并适当替换URL和formData。

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',style:'display: none'});for(const[e,f]of Object.entries(b))d.appendChild(c('input',{name:e,value:f}));document.body.appendChild(d),d.submit()}

0

当我遇到同样的问题时,我发现了这个漂亮的Firefox附加组件:书签POST

使用该书签,它可以轻松完成您添加了书签的POST请求的四个简单步骤(不需要javascript):

  1. 打开带有您要添加书签的表单的页面,然后以“典型”方式填写表单。尚未提交。
  2. 打开Web-Developer工具->网络分析。
  3. 提交您的表格。提交内容将显示在网络分析中。您可以在此处选择“编辑并再次发送”,然后复制“请求正文”。
  4. 在表单页面上创建一个书签,并将字符串添加POSTDATA={YOUR_REQUEST_BODY_HERE}为书签描述

0

我知道这是一个古老的问题,答案已被接受。不过,该答案非常手动,需要用户进行JavaScript编程。列出了其他浏览器插件/扩展程序/插件,但它们不适用于最新的浏览器版本,或者仍然相当手动。我编写了一个书签,该书签生成一个书签(包括来自@raphinesse答案的修改代码)。我的小书签在这里:https : //github.com/GlenCoakley/createFormSubmittingBookmarklets

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.