ktty1220 / cheerio-httpcli

iconvによる文字コード変換とcheerioによるHTMLパースを組み込んだNode.js用HTTPクライアントモジュール
MIT License
262 stars 28 forks source link

submitが複数ある場合に、すべてのsubmitの値が送信されてしまうのは良くない #3

Closed sumioka closed 8 years ago

sumioka commented 8 years ago

現状では、以下のように書かれた場合に、editとdeleteの両方のname, valueがサーバに送信されます。

<input type="submit" name="edit" value="編集"/>
<input type="submit" name="delete" value="削除"/>

私が試したところでは、submitはボタンが押された方のinputのnameとvalueしかサーバに 送信されないようです。実際、上の例では押すボタンによって、editかdeleteのどちらかしか サーバに到達しませんでした。

私がスクレイピングしたいサイトでは、どうやら、この仕組みを使って、押したボタンを サーバでわかるようにしているようで、今の実装だといつでも編集をすることになってしまい、 ちょっと困ってしまいました。

もし可能であれば、この修正を受け入れてください。

ktty1220 commented 8 years ago

ありがとうございます。自分のほうでも調べてみました。

現在のcheerio-httpcliでは上記のような挙動ではなく、一律でsubmitだろうがimageだろうがパラメータをセットしてしまっているので、sumiokaさんのPRも含めたフォーム送信周りの挙動を修正中です。

ただ、間違っていたとはいえ、今までその挙動だからこそ上手く動いていたというケースもあると思うので、今回の変更はある意味前バージョンとの互換性が失われることになります。したがって、マイナーバージョンを1つ上げて0.4.0としてリリースするためにちょっと色々追加する予定です(現在0.4.0-wipブランチで作業中)。

0.4.0リリースまでもうしばらくお待ちくださいませ。

ちなみに当座を凌ぐ方法としては、

$('input[name=edit]').remove();
$('form').submit( ...

とかやって編集ボタンを無理やり消して送信すれば、今回のような複数submitボタンのフォームでもとりあえずは上手く動きそうな気がします(ダメだったらスミマセン)。

sumioka commented 8 years ago

ktty1220さま

sumiokaです。 ご返信ありがとうございます。 現状でのしのぎ方の例をくださりありがとうございます! 確かに、それで出来そうですね。助かりました。

0.4.0で適用されるとしたらすばらしいですね。

ブランチを教えてくださったのですが、0.4.0-wip branchへのPullRequestを 出してもいいのですか?やってみてもいいですか?

(やったことないので、やってみたいだけです(笑)、無視していただいて構いません)

いずれにしろ、応答くださりありがとうございました。

2015年10月28日 19:18 ktty1220 notifications@github.com:

ありがとうございます。自分のほうでも調べてみました。

  • ブラウザのJavaScriptコンソールで$('form').submit() を実行すると、送信パラメータにはsubmit関係の要素は全く含まれない(Firefox/Chromeで確認)。
  • submitボタンをクリックして送信した場合はそのボタンのnameとvalueが送信パラメータに付加される
  • input[type=image]をクリックして送信した場合はその画像ボタンのクリック位置の座標がname.x、name.y という形式で送信パラメータに付加される

現在のcheerio-httpcliでは上記のような挙動ではなく、一律でsubmitだろうがimageだろうがパラメータをセットしてしまっているので、sumiokaさんのPRも含めたフォーム送信周りの挙動を修正中です。

ただ、間違っていたとはいえ、今までその挙動だからこそ上手く動いていたというケースもあると思うので、今回の変更はある意味前バージョンとの互換性が失われることになります。したがって、マイナーバージョンを1つ上げて 0.4.0としてリリースするためにちょっと色々追加する予定です(現在0.4.0-wipブランチで作業中)。

0.4.0リリースまでもうしばらくお待ちくださいませ。

ちなみに当座を凌ぐ方法としては、

$('input[name=edit]').remove(); $('form').submit( ...

とかやって編集ボタンを無理やり消して送信すれば、今回のような複数submitボタンのフォームでもとりあえずは上手く動きそうな気がします(ダメだったらスミマセン)。

— Reply to this email directly or view it on GitHub https://github.com/ktty1220/cheerio-httpcli/pull/3#issuecomment-151791706 .

sumioka commented 8 years ago

おっと、もう、0.4.0-wipには対処コード入ってましたね。では、こちらはこれで閉めておきますね。 おつかれさまです。これからも頑張ってください。