web-dev-qa-db-ja.com

URLを取得するときにWebブラウザにPOSTを使用させるにはどうすればよいですか?

URLを取得するときにWebブラウザにPOSTを使用させるにはどうすればよいですか?

37

メソッドとしてpostを指定するHTMLフォームを使用します。

<form method="post" action="/my/url/">
    ...
    <input type="submit" name="submit" value="Submit using POST" />
</form>

リンクとして実行するためにhadを使用する場合(推奨されません)、onclickハンドラーで動的にフォームを作成して送信することができます。

<script type="text/javascript">
function submitAsPost(url) {
    var postForm = document.createElement('form');
    postForm.action = url;
    postForm.method = 'post';
    var bodyTag = document.getElementsByTagName('body')[0];
    bodyTag.appendChild(postForm);
    postForm.submit();
}
</script>
<a href="/my/url" onclick="submitAsPost(this.href); return false;">this is my post link</a>

サーバー側でこれを強制する必要がある場合は、HTTPメソッドを確認し、POSTに等しくない場合は、 HTTP 405応答コード(メソッドは許可されません) をブラウザーに送信して終了します。正確に実装する方法は、プログラミング言語/フレームワークなどに依存します。

31
Asaph
<form method="post">

URLを取得する場合は、POSTではなく取得します。ブラウザーがロケーションバーを介してPOSTリクエストを発行するようにすることはできません。

21

ブラウザのアドレスバーで投稿リクエストを送信したいというあなたの質問から感じています。

アドレスバーに次のように入力して、「アクション」の値を好きなURLに置き換えます。

data:text/html,<body onload="document.body.firstChild.submit()"><form method="post" action="http://stackoverflow.com">

無効なhtmlですが、ブラウザ(少なくともこれまでにテストしたすべてのもの)がその意味を知っているので、できるだけ短くしたかったのです。

値を投稿する場合は、好きなだけ入力を追加し、各入力の名前と値を好きなように入れ替えます。

<input value="[email protected]" name="email">
<input value="passwordsavedinhistory" name="password">

投稿する機密情報は次の場所に表示されることに注意することが重要です。

  • あなたの歴史
  • あなたのアドレスバー
  • ブラウザのオートコンプリート。
  • おそらく同じタブからアクセスする他のサイト
  • おそらく他にもたくさんのもの

投稿リクエストを送信するのは本当に悪い方法であり、他のすべての答えははるかに優れていますが、それを行うことができるのはまだクールです。

12
Ryan White

何かをテストする場合は、 Fiddler を使用してhttpリクエストを作成することをお勧めします。これにより、アクション動詞(GET、POST、PUT、DELETEなど)と要求内容を指定できます。 POSTではなく、リンクからの非常に特定のリクエストをテストしようとしている場合、ブラウザが行っているリクエストを監視し、修正されたPOSTアクション。

4
user199845

POSTヘッダーを含むURLをWebブラウザーに送信させることはできません。しかし、POSTリクエストURLをテストするには、 chrome および mozilla の「POSTER」拡張を提案できます。

4
yeakbaba

上記のsubmitAsPost()関数は優れたエレガントなソリューションですが、問題があります-URLが長すぎると、一部のブラウザー(FirefoxやIEを含む)がエラーを返します。私たちの多くはこの制限を回避するためにPOSTを使用しているため、この解決策をお勧めします。

// submit a URL using post
function submitAsPost(url) {
    var bodyTag = document.getElementsByTagName('body')[0];
    var postForm = document.createElement('form');
    bodyTag.appendChild(postForm);
    postForm.method = 'POST';

    var serverAndParams = url.split("?");
    postForm.action = serverAndParams[0];
    var params = null;
    try
    {
      var paramsAndHash = serverAndParams[1].split("#");
      params = paramsAndHash[0]; 
      var attrList = params.split("&");
      for (var i = 0; i < attrList.length; i++)
      {
        try
        {
          var keyValue = attrList[i].split("=");
          var el = document.createElement('input');
          el.type="hidden";
          el.name=keyValue[0];
          var value = keyValue[1];
          value = value.replace(/\+/g, ' ');
          el.value=decodeURIComponent(value);
          postForm.appendChild(el);
        }
        catch(error){}
      } 
    }
    catch(error){}

    postForm.submit();
    bodyTag.removeChild(postForm);
}

Firefox、ChromeおよびIEでテスト済み。

3
Gregory

ツールを使用してテストできます。私はいつもあなたと同じ質問をしています。オンラインで入手できるツールはかなりあります。私が使用するツールは次のとおりです。 http://www.hurl.it/

2
MarkZ

私はこの質問が古いことを知っていますが、誰かがこれを役に立つと思うかもしれません。 cURL( http://curl.haxx.se/ )のようなコマンドラインツールを使用して、URLに投稿できます。

例:

curl -v  --basic --user username:password --request POST "http://www.theurltopostto.com"
1
Adam

これはゲームのやや遅れですが、私はこれに出くわし、HTML 5がいくつかの変更を加えていることを発見しました。 inputタグを使用してformmethodを追加できます(したがって、postを選択します)。これは私のために働いた。

参照: http://www.w3schools.com/tags/att_input_formmethod.asp

1
Rodney

問題がある場合:

request.open('POST',url,true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send("data="+JSON.stringify(data));

開発ツールではまだGETを実行しているので、URLは次の形式になっています。

http://example.com/folder

意味は次のとおりです。

http://example.com/folder/

その非常に奇妙なエラーはあなたの質問とは関係ないかもしれませんが、私はそれを数回経験しました。これは、Ubuntu 14.04でApache 2サーバーを使用しているときに、あまり構成が行われていないときに起こりました。

0
zardilior

Telerik(フリーウェア)のユーティリティ「 Fiddler 」を使用すると、http要求を「作成」し、選択した任意の方法(Get、Post、Put、Delなど)を使用して送信できます。テストおよびデバッグ中に非常に役立つ可能性のある、リクエストとレスポンスに関する非常に詳細な情報

0
Cos Callis