Bir HTTP POST isteğini bir yer imine veya GET isteğinde olduğu gibi benzer


26

Bir yer imini, böyle bir GET isteğiyle saklayabilirsiniz:

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

POST isteğini bir şekilde Chrome'da saklayabilir misiniz? Belki bir eklenti ile? Ya da belki Firefox'ta?

Fikir, bunu her zaman bir form doldurmak yerine hızlı bir şekilde yer imlerine yerleştirip hızlı bir şekilde ateşlememdir.



1
İşletim sisteminize bağlı olarak, kullanmak isteyebilirsiniz curletmek yerine bir dosyadan POST isteği göndermek
slhck


FF ve Chrome'da kullanılabilen Greasemonkey uzantısını inceleyin.
ott--

Yanıtlar:


17

Fikir, bunu her zaman bir form doldurmak yerine hızlı bir şekilde yer imlerine yerleştirip hızlı bir şekilde ateşlememdir.

Bu amaçla, aşağıdaki HTML sayfası olacaktır. Çoğu tarayıcıda çalışması gerekir.

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

Farklı kaydedin C:\getToPostve aşağıdaki URL’yi yer imlerine ekleyebilirsiniz:

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

Ad veya değerlerde çoğu karakteri tam anlamıyla kullanabileceksiniz. Aşağıdakileri her zamanki gibi kodlayın:

#   ->   %23
%   ->   %25
&   ->   %26
=   ->   %3D

Bu, tek bir site için düzgün çalıştı, thx! Ancak, AJAX kullanan başka bir site için (sanırım) henüz işe yaramadı (sth yanlış yapıyor olabilir); / get-post-AJAAX tarafından ele alınırsa değişecek olan sth var mı?
Natty

6

Eklentilere veya harici dosyalara dayanması gerekmeyen bir çapraz tarayıcı çözümü arıyorsanız, Javascript bu sözdizimini kullanarak doğrudan bunu yapmak için bir yer işaretine yerleştirilebilir:

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

Denis'in cevabından bazı kodları ödünç almak için:

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

Dezavantajı bunların hepsinin tek bir satıra gitmesidir, çünkü bir yer imi tek satırdır, bu yüzden çalışmak için eğilmeyi biraz düşünebilir. Bu, yer iminin içine girer:

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

Kolayca daha okunaklı bir şeye ve tek satıra geri dönebilmek için çeşitli boşluklar kullanılabilir. Yukarıdaki örnekte "", çok satırlı haline dönüştürmek üzere Notepad ++ gibi bir şeyde \ r \ n ile değiştirilebilir. Daha sonra onu tekrar tek satıra dönüştürmek için bir bul ve \ r \ n yerine "" ile değiştirmek onu tekrar tek satıra dönüştürür. Bu, biraz daha az zihin bükme yapar yapar ...


3

Diğer cevaplar üzerine inşa!

Kodun hata ayıklama sürümü, ayrıca temizleme VE 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(); */
})();

Açıkçası, karşılık gelen html olmadan, 'form' etiketli bir eleman mevcut olmayabilir ... ve eğer işler daha kötü olabilir. Yukarıdakiler bunu iyi göstermektedir. Krom javascript: URI'lar / Yer İmleri'nin yeni bir sekmede çalışmadığını, önce bir kez gezinmeniz gerektiğini unutmayın. Bu, belge nesnesini doldurur, ancak yalnızca bir javascript'i bile doldurur: alert ('t'); hiç birşey yapmıyor.

Aşağıdakileri öneririm.

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

Hata ayıklama ayarlarını kaldırın, beklenenden daha iyi netlik için örnek girişi temizleyin. Aracılığıyla Run http://jscompress.com/ ya da her neyse ve tek bir satır olsun.

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

Düzenleme: Çalışan bir örnek verin.

ABD, MN, Minneapolis'te bunu, Ücretsiz WiFi ESSID "USIW Ücretsiz WiFi" erişmek için kullanın. Bir hesap açmak için https://login.usiwireless.com/mplsfree/logon.php?originalurl=www.google.com/ adresini kullandıktan sonra kötüye kullanım nedeniyle bir kredi kartı istiyorlar.

Bunu, belirgin değişikliklerle birlikte ağa giriş yapmak için kullanın.

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

Modern tarayıcı özelliklerini ve ES6'yı kullanarak javascript bookmarklet yaklaşımının daha kısa bir sürümü:

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

Aşağıdakini yer imi hedefi olarak ayarlayın ve URL ile formData'yı uygun şekilde değiştirin.

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

Aynı problemle karşılaştığımda, Firefox için bu güzel eklentiyi buldum: Bookmark POST

Bu yer işaretiyle, yer işaretli POST isteğinize ilişkin dört kolay adımı (javascript gerekmez):

  1. Sayfayı yer imlerine eklemek istediğiniz formu açın ve formu "tipik" bir şekilde doldurun. Henüz göndermeyin.
  2. Web Geliştirici Araçları -> Ağ Analizi'ni açın.
  3. Formunu gönder. Gönderim ağ analizinde gösterilecektir. Orada "Düzenle ve tekrar gönder" i seçebilir ve "İstek-Organını" kopyalayabilirsin.
  4. Form sayfasına bir Yer İşareti oluşturun ve dizgiyi POSTDATA={YOUR_REQUEST_BODY_HERE}yer imleri açıklaması olarak ekleyin .

0

Bunun kabul edilmiş bir cevabı olan eski bir soru olduğunu biliyorum. Bu cevap kullanıcı için javascript programlama çalışması gerektiren olsa da oldukça elverişlidir. Listelenen başka tarayıcı ekleri / uzantıları / eklentileri var ancak en son tarayıcı sürümüyle çalışmıyorlar veya hala el ile kullanıldılar. Bir yer imi üreten bir yer imi yazdım (@ raphinesse'nin yanıtından değiştirilmiş kod içeren). Benim favori kitabım burada: https://github.com/GlenCoakley/createFormSubmittingBookmarklets .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.