Menyimpan permintaan HTTP POST di bookmark atau yang serupa dengan permintaan GET

26

Anda dapat menyimpan bookmark dengan permintaan GET seperti ini:

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

Bisakah Anda menyimpan permintaan POST dengan cara tertentu di Chrome? Mungkin dengan plugin? Atau mungkin di Firefox?

Idenya adalah bahwa saya menyimpan ini di bookmark dan menjalankannya dengan cepat daripada harus mengisi formulir setiap waktu.

Petruza
sumber
1
Bergantung pada OS Anda, Anda mungkin ingin menggunakannya curluntuk mengirim permintaan POST dari suatu file
slhck
Lihat ekstensi Greasemonkey, tersedia untuk FF dan Chrome.
ott--

Jawaban:

17

Idenya adalah bahwa saya menyimpan ini di bookmark dan menjalankannya dengan cepat daripada harus mengisi formulir setiap waktu.

Untuk tujuan ini, halaman HTML berikut akan dilakukan. Ini seharusnya berfungsi di sebagian besar browser.

<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>

Simpan sebagai C:\getToPostdan Anda dapat mem-bookmark URL berikut:

file:///C:/getToPost?name1=value1&name2=value2#http://url.com/service

Anda dapat menggunakan sebagian besar karakter dalam nama atau nilai secara harfiah. Enkode berikut ini seperti biasa:

#   ->   %23
%   ->   %25
&   ->   %26
=   ->   %3D
Dennis
sumber
Ini telah bekerja dengan cepat untuk satu situs, thx! Namun, untuk situs lain menggunakan AJAX (saya pikir) itu belum berfungsi (saya mungkin melakukan kesalahan); adakah sth yang akan berubah jika get / post-thing ditangani oleh AJAX?
gila tentang natty
6

Jika mencari solusi lintas peramban yang tidak perlu bergantung pada add-on atau file eksternal, Javascript dapat ditempatkan di bookmark secara langsung untuk mencapai ini, menggunakan sintaks ini:

javascript:(function(){ <Your Javascript code goes here> })();

Meminjam beberapa kode dari jawaban Denis untuk menggambarkan:

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();}
)();

Kelemahannya adalah semua ini harus berjalan dalam satu baris, karena bookmark adalah satu baris, sehingga dapat sedikit membungkuk untuk bekerja dengannya. Ini masuk dalam bookmark itu sendiri:

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();   })();

Sejumlah ruang dapat digunakan untuk dengan mudah mengkonversi ke sesuatu yang lebih mudah dibaca dan kembali ke satu baris. Pada contoh di atas "" dapat diganti dengan \ r \ n dalam sesuatu seperti Notepad ++ untuk mengubahnya kembali ke multi baris. Kemudian untuk mengubahnya kembali menjadi satu baris, temukan dan ganti dengan \ r \ n ganti dengan "" ubah kembali menjadi satu baris. Itu membuatnya sedikit kurang lentur ...

jotap
sumber
3

Membangun jawaban lain!

Versi debug kode, plus pembersihan DAN 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(); */
})();

Jelas tanpa html yang sesuai, elemen dengan nama tag 'form' mungkin tidak ada ... dan hal-hal yang lebih buruk jika terjadi. Di atas menunjukkan ini dengan baik. Perhatikan bahwa dalam javascript kromium: URI / Bookmark tidak berfungsi di tab baru, Anda harus menavigasi satu kali lebih dulu. Ini mengisi objek dokumen, tetapi bahkan hanya javascript: lansiran ('t'); tidak melakukan apa-apa.

Saya sarankan yang berikut ini.

(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();
})();

Hapus pengaturan debug, bersihkan input contoh untuk kejelasan yang lebih baik dari apa yang diharapkan. Jalankan melalui http://jscompress.com/ atau apa pun dan dapatkan satu baris.

!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()}();

Sunting: Berikan contoh yang berfungsi.

Di Minneapolis, MN, AS menggunakan ini untuk mengakses ESSID WiFi Gratis "USIW WiFi Gratis". Setelah menggunakan https://login.usiwireless.com/mplsfree/logon.php?originalurl=www.google.com/ untuk mendaftarkan akun, mereka menginginkan kartu kredit karena alasan penyalahgunaan.

Gunakan ini untuk masuk ke jaringan, dengan penggantian yang jelas.

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()}();
Mike Mestnik
sumber
3

Versi yang lebih pendek dari pendekatan bookmarklet javascript menggunakan fitur browser modern dan 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()
}

Tetapkan yang berikut ini sebagai target bookmark dan ganti URL dan formData dengan tepat.

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()}
raphinesse
sumber
0

Ketika saya menghadapi masalah yang sama, saya menemukan add-on yang indah ini untuk Firefox: Bookmark POST

Dengan bookmark itu, empat langkah mudah untuk permintaan POST yang telah di-bookmark (tidak diperlukan javascript):

  1. Buka halaman dengan formulir yang ingin Anda tandai dan isi formulir dengan cara "khas". Jangan kirim dulu.
  2. Buka Alat Pengembang Web -> Analisis Jaringan.
  3. Kirimkan formulir Anda. Kirim akan muncul di analisis jaringan. Di sana Anda dapat memilih "Edit dan kirim lagi" dan salin "Badan Permintaan".
  4. Buat Bookmark ke halaman formulir dan tambahkan string POSTDATA={YOUR_REQUEST_BODY_HERE}sebagai deskripsi bookmark .
SebastianH
sumber
0

Saya tahu ini adalah pertanyaan lama dengan jawaban yang diterima. Namun jawaban itu cukup manual, membutuhkan upaya pemrograman javascript untuk pengguna. Ada add-on / ekstensi / plugin browser lain yang terdaftar tetapi tidak bekerja dengan versi browser terbaru atau masih cukup manual. Saya menulis bookmarklet yang menghasilkan bookmarklet (yang mencakup kode yang dimodifikasi dari jawaban @ raphinesse). Bookmarklet saya ada di sini: https://github.com/GlenCoakley/createFormSubmittingBookmarkletslets .

Lembah kecil
sumber