如何使用POST数据在Firefox中保存书签?


23

我想将无法使用GET访问的页面另存为Firefox书签。检索页面的唯一方法是发送一些POST数据。

例如,我想为Chronopost包裹追踪页面添加书签,该页面仅允许POST输入包裹号码。

有谁知道Firefox扩展或其他技术可以使我做到这一点?


只是一个怪胎:GET请求不应该更改数据,这就是为什么您可以为它们添加书签并可以随意调用它们的原因。允许POST请求更改服务器上的状态,这就是为什么它们不容易添加书签的原因。在您标记为POST的POST链接上,考虑多次调用它们是否会引起问题,例如从Amazon购买额外的物品。
Rich Homolka

Answers:


19

使用书签。例如,您可以使用位于http://userjs.up.seesaa.net/js/bookmarklet.html的工具,通过以下代码创建一个书签:

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

然后将生成的小书签链接用作您喜欢的浏览器中的书签。单击它时,它将打开一个窗口,使用参数创建一个表单{search:'test'},然后提交该表单。

要更改URL和参数,只需调整对的最后一次调用即可post_to_url

如果您只需要创建一次书签并多次使用,则此策略非常有用。但是,如果您需要定期创建新书签,那么创建新书签并不容易。


您是否不需要{search:'test'}中的'周围搜索?
2013年

1
@mezhaka:否。因为实际上这是作为JavaScript而不是JSON字符串求值的,所以除非属性名称包含空格或特殊字符,否则属性名称周围的引号是可选的。
StriplingWarrior

1
谢谢回复。如果我需要用网址引用我的key:values吗?就像我的键中有空格或非ASCII字符,并且值足以用''包围起来一样,还是我还需要注意引用诸如ö等符号?
2013年

@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

感谢这个问题的答案,我找到了这个漂亮的Firefox附加组件:Bookmark POST。它缺少好的文档,但这应该可以帮助您入门:

使用该书签,它可以轻松完成您添加了书签的POST请求的四个简单步骤(无需使用JavaScript):

  1. 打开带有您要添加书签的表单的页面,并以“典型”方式填写表单。尚未提交。
  2. 打开Web-Developer工具->网络分析。
  3. 提交您的表格。提交内容将显示在网络分析中。您可以在此处选择“编辑并再次发送”,然后复制“请求正文”。
  4. 在表单页面上创建一个书签,并将字符串添加POSTDATA={YOUR_REQUEST_BODY_HERE}为书签描述

对我而言,这比弄弄Javascript要容易得多。


很好的答案,但是在Waterfox 56.2中
不起作用

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

处理本地保存的文件时,不会发送引用。即使在铬中。
如果文件将放置在远程网站上,则将发送引荐来源,并将包含网站主机和原始查询字符串。


2

frmget书签作品为许多网站都漠不关心的HTTP方法:应用书签,提交表单,书签结果页。

对于确实需要POST的网站,有此扩展名,它对用户并不十分友好。您可以将其与frmget结合使用:应用frmget,提交表单,为页面添加书签,将GET参数复制到description字段(以开头)POSTDATA=


1

我修改了@StriplingWarrior提供的脚本,以接受HAR文件作为参数。可以从Chrome的开发人员工具(Ctrl + Shift + J)中保存HAR文件。

首先打开包含已过帐表格数据的页面,然后右键单击“网络”选项卡上的第一个文档,然后选择“将条目复制为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文件,它将打开已发布的表单。如果站点使用viewstate或检查引荐来源网址,则此方法无效。



0

根据我对发布的了解,无法自己记录该数据并重新发送。

我建议获得一个加载项,比默认情况下,Firefox更好地为您填充表单。

Chrome实际上具有内置的非常强大的表单识别和填写功能,但是我敢肯定有一个可以执行相同功能的firefox插件。

试试这个,看起来很有希望: Form Saver Firefox附加组件


但是遗憾的是,Chrome浏览器不提供保存通用HTTP AUTH页面的密码的功能。
qroberts

如今,拉撒路比保护形式更好。
东武


0

根据用户的书签

这似乎适用于带有Firefox的UPS和搜索栏的关键字(例如“ ups XYZ”,其中XYZ然后进入%s小书签内的占位符):

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

(注意这必须是一行)

也可以看看:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.