web-dev-qa-db-ja.com

POSTデータを使用してFirefoxでブックマークを保存するにはどうすればよいですか?

GETを使用してアクセスできないページをFirefoxブックマークとして保存したいのですが。ページを取得する唯一の方法は、いくつかのPOSTデータを送信することです。

たとえば、 クロノポストの小包追跡ページ をブックマークしたいと思います。これは、小包番号の入力にPOSTのみを許可します。

Firefoxの拡張機能や、これを可能にする他のテクニックを知っている人はいますか?

25

ブックマークレットを使用します。たとえば、 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の呼び出しを微調整するだけです。

この戦略は、ブックマークを1回作成して、それを何度も使用する必要がある場合に最適です。ただし、定期的に作成する必要がある場合は、新しいブックマークを作成するのはそれほど簡単ではありません。

21

@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とパラメーターを変更し、生成されたブックマークレットをブックマークに追加できます。 。これは、たとえばルーターのコントロールパネルにアクセスするのに非常に便利です。

4
pablobart

この質問の回答のおかげで、Firefox用のこの美しいアドオンを見つけました: Bookmark POST 。それは良いドキュメントを欠いていますが、これはあなたが始めるはずです:

そのブックマークを使用すると、ブックマークしたPOSTリクエスト(JavaScriptは不要)への4つの簡単なステップ:

  1. ブックマークしたいフォームのあるページを開き、「通常の」方法でフォームに入力します。まだ提出しないでください。
  2. Web-Developer Tools-> Network Analysisを開きます。
  3. フォームを送信します。送信はネットワーク分析に表示されます。そこで「編集して再送信」を選択し、「リクエストボディ」をコピーできます。
  4. フォームページにブックマークを作成し、文字列POSTDATA={YOUR_REQUEST_BODY_HERE}をブックマークdescriptionとして追加します。

私にとって、これはJavascriptをいじるよりもはるかに簡単です。

4
SebastianH

最も単純なアプローチ:

フォームに記入して自動アップロードしたブックマークレット

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は現在のWebページのURLをHTTPリファラーとして送信します。 (FirefoxとIEはしません。)

なぜリファラーが重要なのですか?プライバシーの懸念を考慮せずに、一部のWebサイトはPOSTのリファラーをチェックして、非表示のiframeフォームの投稿による悪意のあるリクエストから身を守ります。

代替アプローチ:

ここで説明 、少し読みやすくなりますが、どこかにHTMLファイルが必要です。使用方法は次のようになります。

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

ローカルに保存されたファイルを処理する場合、リファラーは送信されません。クロムでも。
ファイルがリモートWebサイトに配置される場合、リファラーが送信され、Webサイトのホストと元のクエリ文字列が含まれます。

3
user

frmgetブックマークレット は、httpメソッドに関係のない多くのサイトで機能します。ブックマークレットを適用し、フォームを送信し、結果ページをブックマークします。

POSTを必要とするサイトの場合、 この拡張機能 がありますが、これはひどくユーザーフレンドリーではありません。これをfrmgetと組み合わせることができます。frmgetを適用し、フォームを送信し、ページをブックマークし、GETパラメータを説明フィールドにコピーします。接頭辞はPOSTDATA=です。

2
Tobu

@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ファイルとして保存すると、投稿されたフォームが開きます。サイトがビューステートを使用している場合、またはリファラーをチェックしている場合、これは機能しません。

1
bortao

Firefox および Chrome で利用可能なiMacroプラグインを使用します。

1
john h

私は this Firefox Addonを使用してブックマークPOSTアクションをします。

0
northben

ユーザーのブックマークレット に基づく:

これは、Firefoxと検索バーのキーワードを備えたUPSで機能するようです(例:「upsXYZ」の場合、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>'

(これは1行でなければならないことに注意してください)

参照:

0
handle

投稿について私が理解していることから、そのデータを自分で記録して再送信する方法はありません。

デフォルトでFirefoxよりもフォームに記入するアドオンを入手することをお勧めします。

Chromeには実際には非常に強力なフォーム認識と入力機能が組み込まれていますが、同じことを行うFirefoxアドオンがあると確信しています。

これを試してみてください、それは有望に見えます: フォームセーバーFirefoxアドオン

0
robertpateii