การจัดเก็บคำขอ HTTP POST ในบุ๊กมาร์กหรือสิ่งที่คล้ายกับการขอ GET


26

คุณสามารถจัดเก็บบุ๊คมาร์คด้วยคำขอ GET ดังนี้:

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

คุณสามารถจัดเก็บคำขอ POST ใน Chrome ได้ไหม? อาจจะมีปลั๊กอินหรือไม่? หรือบางทีใน Firefox?

แนวคิดก็คือฉันเก็บมันไว้ในที่คั่นหนังสือและยิงมันอย่างรวดเร็วแทนที่จะต้องกรอกแบบฟอร์มทุกครั้ง



1
ทั้งนี้ขึ้นอยู่กับระบบปฏิบัติการของคุณคุณอาจต้องการใช้curlเพื่อส่งคำขอ POST จากไฟล์แทน
slhck


ชำระเงินส่วนขยาย Greasemonkey พร้อมใช้งานสำหรับ FF และ Chrome
ott--

คำตอบ:


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 (ฉันคิดว่า) มันยังใช้งานไม่ได้ (ฉันอาจทำผิดไป) มี sth อะไรบ้างที่จะเปลี่ยนหาก AJAX จัดการรับ / โพสต์สิ่งของ?
บ๊องเกี่ยวกับ natty

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 ที่เกี่ยวข้ององค์ประกอบที่มีชื่อ 'รูปแบบ' แท็กอาจไม่มีอยู่จริง ... และสิ่งต่าง ๆ จะแย่ลงถ้าเป็นเช่นนั้น ด้านบนแสดงให้เห็นถึงสิ่งนี้ได้เป็นอย่างดี โปรดทราบว่าใน Chromium javascript: URIs / Bookmarks ไม่สามารถใช้งานได้ในแท็บใหม่คุณจะต้องสำรวจอีกครั้งก่อน สิ่งนี้จะเติมวัตถุเอกสาร แต่เพียงแค่ 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()}();

แก้ไข: ระบุตัวอย่างการทำงาน

ใน Minneapolis, MN, USA ใช้สิ่งนี้เพื่อเข้าถึง Free WiFi ESSID "USIW Free WiFi" หลังจากใช้https://login.usiwireless.com/mplsfree/logon.php?originalurl=www.google.com/?hl=thเพื่อลงทะเบียนบัญชีพวกเขาต้องการบัตรเครดิตสำหรับเหตุผลที่ไม่เหมาะสม

ใช้สิ่งนี้เพื่อเข้าสู่ระบบเครือข่ายด้วยการเปลี่ยนที่ชัดเจน

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

วิธีย่อ bookmarklet ของ javascript โดยใช้คุณสมบัติเบราว์เซอร์ที่ทันสมัยและ ES6:

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

เมื่อฉันประสบปัญหาเดียวกันฉันพบ Add-on ที่สวยงามนี้สำหรับ Firefox: Bookmark POST

ด้วยบุ๊คมาร์คนั้นสี่ขั้นตอนง่าย ๆ กับคำขอ POST ที่บุ๊กมาร์กของคุณ (ไม่ต้องใช้จาวาสคริปต์):

  1. เปิดหน้าด้วยฟอร์มที่คุณต้องการคั่นหน้าและกรอกแบบฟอร์มในแบบ "ปกติ" อย่าเพิ่งส่ง
  2. เปิดเครื่องมือผู้พัฒนาเว็บ -> การวิเคราะห์เครือข่าย
  3. ส่งแบบฟอร์มของคุณ การส่งจะปรากฏขึ้นในการวิเคราะห์เครือข่าย คุณสามารถเลือก "แก้ไขและส่งอีกครั้ง" และคัดลอก "คำขอร่างกาย"
  4. สร้าง Bookmark ที่หน้ารูปแบบและเพิ่มสตริงPOSTDATA={YOUR_REQUEST_BODY_HERE}เป็นบุ๊กคำอธิบาย

0

ฉันรู้ว่านี่เป็นคำถามเก่าที่มีคำตอบที่ยอมรับได้ คำตอบนั้นเป็นคู่มือค่อนข้างจำเป็นต้องมีความพยายามในการเขียนโปรแกรมจาวาสคริปต์สำหรับผู้ใช้ มีรายการเพิ่มเติม / ส่วนขยาย / ปลั๊กอินของเบราว์เซอร์อื่น ๆ แต่ไม่สามารถใช้งานได้กับเบราว์เซอร์รุ่นล่าสุดหรือยังคงเป็นคู่มืออยู่ ฉันเขียน bookmarklet ที่สร้าง bookmarklet (ซึ่งรวมถึงโค้ดที่แก้ไขจากคำตอบของ @ raphinesse) bookmarklet ของฉันอยู่ที่นี่: https://github.com/GlenCoakley/createFormSubmittingBookmarklets

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.