Lưu trữ một yêu cầu POST HTTP trong một dấu trang hoặc một cái gì đó tương tự như bạn yêu cầu GET


26

Bạn có thể lưu trữ dấu trang với yêu cầu NHẬN như thế này:

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

Bạn có thể lưu trữ một yêu cầu POST theo một cách nào đó trong Chrome không? Có lẽ với một plugin? Hoặc có thể trong Firefox?

Ý tưởng là tôi lưu trữ cái này trong một dấu trang và kích hoạt nó một cách nhanh chóng thay vì phải điền vào một biểu mẫu mỗi lần.



1
Tùy thuộc vào hệ điều hành của bạn, bạn có thể muốn sử dụng curlđể gửi yêu cầu POST từ một tệp thay vào đó
slhck


Kiểm tra tiện ích mở rộng Greasemonkey, có sẵn cho FF và Chrome.
ott--

Câu trả lời:


17

Ý tưởng là tôi lưu trữ cái này trong một dấu trang và kích hoạt nó một cách nhanh chóng thay vì phải điền vào một biểu mẫu mỗi lần.

Đối với mục đích này, trang HTML sau đây sẽ làm. Nó nên hoạt động trong hầu hết các trình duyệt.

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

Lưu nó dưới dạng C:\getToPostvà bạn có thể đánh dấu URL sau:

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

Bạn sẽ có thể sử dụng hầu hết các ký tự trong tên hoặc giá trị theo nghĩa đen. Mã hóa như sau như bình thường:

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

Điều này đã làm việc thẳng thắn cho một trang web, thx! Tuy nhiên, đối với một trang web khác sử dụng AJAX (tôi nghĩ) nó vẫn chưa hoạt động (tôi có thể đang làm sai); Có sth nào sẽ thay đổi nếu get / post-thing được xử lý bởi AJAX không?
hấp dẫn về

6

Nếu tìm kiếm một giải pháp trình duyệt chéo không cần dựa vào các tiện ích bổ sung hoặc các tệp bên ngoài, Javascript có thể được đặt trực tiếp vào dấu trang để đạt được điều này, sử dụng cú pháp này:

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

Mượn một số mã từ câu trả lời của Denis để minh họa:

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

Nhược điểm là tất cả những điều này phải đi trên một dòng duy nhất, bởi vì một dấu trang là một dòng duy nhất, vì vậy nó có thể khiến một chút suy nghĩ uốn cong để làm việc với. Điều này đi vào chính dấu trang:

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

Một số khoảng trắng có thể được sử dụng để dễ dàng chuyển đổi thành thứ gì đó dễ đọc hơn và quay lại dòng đơn. Trong ví dụ trên, "" có thể được thay thế bằng \ r \ n trong một cái gì đó như Notepad ++ để chuyển đổi nó trở lại thành nhiều dòng. Sau đó, để chuyển đổi nó trở lại một dòng, hãy tìm và thay thế cho \ r \ n thay thế bằng "" chuyển đổi nó trở lại thành một dòng. Điều đó làm cho nó ít uốn cong tâm trí ...


3

Xây dựng trên các câu trả lời khác!

Phiên bản gỡ lỗi của mã, cộng với dọn dẹp VÀ 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(); */
})();

Rõ ràng là không có html tương ứng, phần tử có tên thẻ 'mẫu' có thể không tồn tại ... và mọi thứ sẽ tệ hơn nếu có. Những điều trên chứng tỏ điều này tốt. Lưu ý rằng trong javascript: URI / Dấu trang không hoạt động trong tab mới, trước tiên bạn phải điều hướng một lần. Điều này cư trú đối tượng tài liệu, nhưng thậm chí chỉ là một javascript: alert ('t'); Không lam gi cả.

Tôi đề nghị như sau.

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

Xóa cài đặt gỡ lỗi, dọn sạch đầu vào ví dụ để rõ ràng hơn về những gì được mong đợi. Chạy qua http://jscompress.com/ hoặc bất cứ điều gì và nhận được một dòng duy nhất.

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

Chỉnh sửa: Cung cấp một ví dụ làm việc.

Tại Minneapolis, MN, Hoa Kỳ sử dụng điều này để truy cập WiFi miễn phí ESSID "USIW WiFi miễn phí". Sau khi sử dụng https://login.usiwpered.com/mplsfree/logon.php?origenurl=www.google.com/ để đăng ký tài khoản, họ muốn có thẻ tín dụng vì lý do lạm dụng.

Sử dụng điều này để đăng nhập vào mạng, với sự thay thế rõ ràng.

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

Phiên bản ngắn hơn của phương pháp bookmarklet javascript sử dụng các tính năng trình duyệt hiện đại và 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()
}

Đặt mục sau đây làm mục tiêu đánh dấu và thay thế URL và formData một cách thích hợp.

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

Khi tôi gặp vấn đề tương tự, tôi đã tìm thấy tiện ích bổ sung tuyệt đẹp này cho Firefox: Bookmark POST

Với dấu trang đó, bốn bước dễ dàng cho yêu cầu POST được đánh dấu của bạn (không yêu cầu javascript):

  1. Mở trang với biểu mẫu bạn muốn đánh dấu và điền vào biểu mẫu theo cách "điển hình". KHÔNG nộp chưa.
  2. Mở Công cụ dành cho nhà phát triển web -> Phân tích mạng.
  3. Gửi mẫu của bạn. Việc gửi sẽ hiển thị trong các phân tích mạng. Ở đó bạn có thể chọn "Chỉnh sửa và gửi lại" và sao chép "Thân yêu cầu".
  4. Tạo một Bookmark vào trang mẫu và thêm chuỗi POSTDATA={YOUR_REQUEST_BODY_HERE}như mô tả dấu trang .

0

Tôi biết đây là một câu hỏi cũ với một câu trả lời được chấp nhận. Câu trả lời đó khá thủ công, đòi hỏi nỗ lực lập trình javascript cho người dùng. Có các tiện ích bổ sung / tiện ích mở rộng / plugin khác được liệt kê nhưng chúng không hoạt động với phiên bản trình duyệt mới nhất hoặc vẫn khá thủ công. Tôi đã viết một bookmarklet tạo ra một bookmarklet (bao gồm mã được sửa đổi từ câu trả lời của @ raphinesse). Bookmarklet của tôi ở đây: https://github.com/GlenCoakley/createFormSubmmitBookmarklets .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.