วิธีบันทึกบุ๊กมาร์กใน Firefox ด้วยข้อมูล POST


23

ฉันต้องการบันทึกเป็น Firefox คั่นหน้าซึ่งไม่สามารถเข้าถึงได้โดยใช้ GET วิธีเดียวในการเรียกหน้านี้คือการส่งข้อมูล POST

ตัวอย่างเช่นฉันต้องการบุ๊คมาร์คหน้าการติดตามพัสดุ Chronopostซึ่งอนุญาตให้ POST ป้อนหมายเลขพัสดุเท่านั้น

ไม่มีใครรู้ว่าส่วนขยายของ Firefox หรือเทคนิคอื่น ๆ ซึ่งจะทำให้ฉันทำเช่นนี้?


ทราบเพียงแค่: คำขอ GET ไม่ควรเปลี่ยนข้อมูลนั่นเป็นเหตุผลที่คุณสามารถคั่นหน้าไว้และสามารถเรียกได้บ่อยเท่าที่คุณต้องการ คำขอ POST ได้รับอนุญาตให้เปลี่ยนสถานะบนเซิร์ฟเวอร์ซึ่งเป็นสาเหตุที่ทำให้ไม่สามารถคั่นหน้าได้อย่างง่ายดาย ในลิงก์ POST ที่คั่นหน้าเว็บคุณคิดว่าการโทรหาหลายครั้งจะทำให้เกิดปัญหาหรือไม่เช่นการซื้อรายการพิเศษจาก Amazon
Rich Homolka

คำตอบ:


20

ใช้ bookmarklet ตัวอย่างเช่นคุณสามารถใช้เครื่องมือได้ที่http://userjs.up.seesaa.net/js/bookmarklet.htmlเพื่อสร้าง bookmarklet ด้วยรหัสต่อไปนี้:

(function(){
  var post_to_url = function(path, params, method) {
    var openWindow = window.open(path);
    method = method || "post"; 
    var form = openWindow.document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
    }
    openWindow.document.body.appendChild(form);
    form.submit();
  };
post_to_url(
  'http://www.chronopost.fr/transport-express/livraison-colis/engineName/search/accueil/suivi', 
  {search:'test'});
})()

จากนั้นใช้ลิงก์ bookmarklet ที่สร้างขึ้นเป็นบุ๊คมาร์คในเบราว์เซอร์ที่คุณชื่นชอบ เมื่อคุณคลิกมันจะเปิดหน้าต่างสร้างฟอร์มด้วยพารามิเตอร์{search:'test'}และส่งแบบฟอร์มนั้น

เมื่อต้องการเปลี่ยน URL post_to_urlและพารามิเตอร์เพียงแค่ปรับแต่งที่สุดท้ายที่จะโทร

กลยุทธ์นี้อาจยอดเยี่ยมหากคุณเพียงแค่สร้างที่คั่นหน้าเว็บหนึ่งครั้งและใช้งานหลายครั้ง อย่างไรก็ตามมันไม่ได้ทำให้ง่ายในการสร้างที่คั่นหนังสือใหม่หากคุณจำเป็นต้องทำอย่างสม่ำเสมอ


คุณไม่ต้องการ 'การค้นหารอบ ๆ ใน {search:' test '} ใช่ไหม
Anton Daneyko

1
@mezhaka: ไม่เพราะนี่เป็นการประเมินว่าเป็นจาวาสคริปต์แทนที่จะเป็นสตริง JSON เครื่องหมายคำพูดรอบชื่อคุณสมบัติจะเป็นตัวเลือกเว้นแต่ชื่อคุณสมบัติจะมีช่องว่างหรืออักขระพิเศษ
StriplingWarrior

1
ขอบคุณสำหรับการตอบกลับ. คุณจะทำอย่างไรถ้าฉันต้องการอ้างคำพูดของฉัน: ค่า เช่นถ้าฉันมีช่องว่างหรือไม่ใช่อักขระ ASCII ในคีย์และค่าของฉันนั่นก็เพียงพอแล้วที่จะล้อมรอบด้วย '' หรือฉันต้องดูแลเครื่องหมายคำพูดเช่นö?
Anton Daneyko

@mezhaka: ที่นี่กฎระเบียบที่มี: stackoverflow.com/a/9568622/120955
StriplingWarrior

4

ใช้คำตอบโดย @StriplingWarrior ฉันเปลี่ยนสคริปต์เล็กน้อยเพื่อให้มีลักษณะการทำงานเหมือนกับบุ๊คมาร์คปกติโดยเปิดบุ๊กมาร์กในหน้าต่างเดียวกัน

(function(){
  var post_to_url = function(path, params, method) {
    method = method || "post"; 
    var form = window.document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
    }
    window.document.body.appendChild(form);
    form.submit();
  };
post_to_url(
  'http://192.168.0.1/goform/login', 
  {loginPassword:'password',loginUsername:'admin'});
})()

การใช้เครื่องมือในhttp://userjs.up.seesaa.net/js/bookmarklet.htmlคุณสามารถคัดลอกและวางรหัสเปลี่ยน URL และพารามิเตอร์และเพิ่ม bookmmarklet ที่สร้างไปยังที่คั่นหนังสือของคุณ สิ่งนี้มีประโยชน์ในการเข้าถึงตัวอย่างเช่นแผงควบคุมเราเตอร์ของคุณ


4

ขอบคุณกับคำตอบในคำถามนี้ผมพบว่านี้สวยงาม Add-on สำหรับ Firefox: Bookmark POST มันไม่มีเอกสารที่ดี แต่คุณควรเริ่มต้น:

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

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

สำหรับฉันนี่เป็นวิธีที่ง่ายกว่าเล่นซอกับ Javascript


คำตอบที่ยอดเยี่ยม แต่มันไม่ทำงานใน Waterfox 56.2
Euri Pinhollow

3

วิธีที่ง่ายที่สุด:

คั่นหน้าเว็บด้วยฟอร์มที่กรอกและโหลดอัตโนมัติ

javascript:'<html><body onload="document.forms[0].submit()"><form action="http://www.example.com" method="POST"><input name="whatever" value="whatever" type="hidden"></form></body></html>'

ข้อเสีย: Chromium จะส่ง URL หน้าเว็บปัจจุบันเป็นผู้อ้างอิง HTTP (Firefox และ IE จะไม่)

ทำไมผู้อ้างอิงถึงสำคัญ? บางเว็บไซต์จะตรวจสอบผู้อ้างอิงใน POST เพื่อป้องกันตัวเองจากคำขอที่เป็นอันตรายที่ทำโดยการโพสต์ฟอร์ม iframe ที่ซ่อนไว้โดยไม่คำนึงถึงความเป็นส่วนตัว

ทางเลือกวิธีการ:

อธิบายไว้ที่นี่มันสามารถอ่านได้มากกว่าเล็กน้อย แต่ต้องการไฟล์ HTML ที่อื่นการใช้จะเป็นดังนี้:

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

เมื่อทำงานผ่านไฟล์ที่บันทึกในเครื่องผู้อ้างอิงจะไม่ถูกส่ง แม้ใน Chromium
หากไฟล์จะถูกวางไว้บนเว็บไซต์ระยะไกลผู้อ้างอิงจะถูกส่งและจะมีโฮสต์เว็บไซต์และสตริงการสืบค้นเดิม


2

frmget bookmarkletงานสำหรับเว็บไซต์จำนวนมากที่จะไม่แยแสกับวิธี http: ใช้ bookmarklet ที่ส่งแบบฟอร์มมาร์คหน้าผล

สำหรับเว็บไซต์ที่ต้องการ POST มีส่วนขยายนี้ซึ่งไม่เป็นมิตรต่อผู้ใช้ คุณสามารถรวมกับ frmget: สมัคร frmget ส่งแบบฟอร์มมาร์คหน้าให้คัดลอก GET POSTDATA=พารามิเตอร์ลงในช่องคำอธิบายนำหน้าด้วย


1

ฉันแก้ไขสคริปต์ที่จัดหาโดย @StriplingWarrior เพียงเล็กน้อยเพื่อยอมรับไฟล์ HAR เป็นพารามิเตอร์ สามารถบันทึกไฟล์ HAR ได้จากเครื่องมือนักพัฒนาซอฟต์แวร์ของ Chrome (Ctrl + Shift + J)

ขั้นแรกให้เปิดหน้าเว็บที่มีข้อมูลในแบบฟอร์มที่โพสต์ไว้แล้วจากนั้นคลิกขวาที่เอกสารแรกบนแท็บเครือข่ายแล้วเลือก "คัดลอกรายการเป็น HAR" จากนั้นวางเนื้อหาในสคริปต์ด้านล่าง:

<html><body><script>
function dopost() {
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", har["request"]["url"]);
var params = har["request"]["postData"]["params"];
for(var e in params) {
    var hiddenField = document.createElement("input");
    hiddenField.setAttribute("type", "hidden");
    hiddenField.setAttribute("name", params[e]["name"]);
    hiddenField.setAttribute("value", params[e]["value"]);
    form.appendChild(hiddenField);
}
document.body.appendChild(form);
form.submit();
}
window.onload=dopost;

var har=
//-----PASTE HERE------

</script>
</body></html>

บันทึกเป็นไฟล์ html และควรเปิดแบบฟอร์มที่โพสต์ สิ่งนี้ใช้ไม่ได้หากไซต์ใช้มุมมองหรือตรวจสอบผู้อ้างอิง



0

จากสิ่งที่ฉันเข้าใจเกี่ยวกับการโพสต์ไม่มีวิธีการบันทึกข้อมูลนั้นด้วยตนเองและส่งซ้ำอีกครั้ง

ฉันขอแนะนำให้รับส่วนเสริมที่กรอกแบบฟอร์มให้คุณดีกว่า Firefox ตามค่าเริ่มต้น

Chrome มีการจดจำรูปแบบที่ทรงพลังมากและมีคุณสมบัติในตัว แต่ฉันแน่ใจว่ามีส่วนเสริมของ Firefox ที่ทำสิ่งเดียวกัน

ลองอันนี้ดูเหมือนจะมีแนวโน้ม: Add-on ของ Saver ฟอร์มของ Firefox


แต่น่าเสียดายที่ Chrome ไม่มีข้อเสนอให้บันทึกรหัสผ่านสำหรับหน้า HTTP AUTH ทั่วไป
qroberts

ลาซารัสดีกว่าโปรแกรมรักษาฟอร์มในปัจจุบัน
Tobu


0

อิงจากbookmarklet ของผู้ใช้ :

สิ่งนี้ดูเหมือนจะใช้ได้กับ UPS กับ Firefox และคำหลักสำหรับแถบการค้นหา (เช่น "ups XYZ" ซึ่ง XYZ จะเข้าสู่%sตัวยึดตำแหน่งภายใน bookmarklet):

javascript:'
<html><body%20onload="document.forms[0].submit()">
  <form%20action="https://wwwapps.ups.com/WebTracking/track"%20method="POST">
  <input%20name="trackNums"%20value="%s"%20type="hidden">
  <input%20name="track.x"%20value="anything"%20type="hidden">
  </form>
</body></html>'

(โปรดทราบว่าจะต้องมีหนึ่งบรรทัด)

ดูสิ่งนี้ด้วย:

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