3

私はWWW::Mechanizeを使用して標準的な Web サイトのトラバーサルを行っていますが、ある時点で特別な POST リクエストを作成して送信する必要があります。これにはすべてセッション Cookie が必要です。

私が作成している POST リクエストでは、スペースは + 記号にエンコードされていますが、%20 としてエンコードする必要があります。

この動作を変更する方法がわかりません。それらが同等であることは理解していますが、私の手に負えない理由により、これが私がしなければならないことです.

助けてくれてありがとう。

4

2 に答える 2

1

これはURI::_query::query_form()にハードコーディングされています。スペースを + に変換します。

 $val =~ s/ /+/g;

次に、結合されたペアで URI::_query::query を呼び出します。+ 記号のみがエンコードされたスペースである必要があります。おそらく最も簡単な方法は、 URI::_query::query への呼び出しをHook::LexWrapでインターセプトし、呼び出しが開始される前に引数を変更して + を %20 に変換し、そこから先に進むことです。

もう少し煩わしいのは、URI::_query::query を再定義することです。それほど長くはありません。サブルーチンの先頭にコードを追加して、続行する前に引数を変換するだけです。

または、壊れたパーサーを反対側で修正できます。:)

Mastering Perlには、メソッドのオーバーライドと動的サブルーチンの扱いに関する章がいくつかあります。秘訣は、元のソースを変更せずに行うことです。これにより、他のすべての人に新しい問題が発生することはありません。

于 2009-09-07T15:45:09.940 に答える
0

これは URI::_query::query_form() でハードコーディングされているようです。$URI::DEFAULT_QUERY_FORM_DELIMITER で行われるように、グローバルに基づいて条件付きで変更し、URI メンテナーに変更を送信します。

それ以外に、LWP::UserAgent request_prepare コールバック ハンドラを使用できますか?

于 2009-09-07T01:25:52.300 に答える