3

我正在使用WWW::Mechanize进行一些标准的网站遍历,但有一次我必须构建一个特殊的 POST 请求并将其发送出去。所有这些都需要会话 cookie。

在我发出的 POST 请求中,空格被编码为 + 符号,但我需要将它们编码为 %20。

我不知道如何改变这种行为。我意识到它们是等价的,但出于我无法控制的原因,这是我必须做的。

谢谢你的帮助。

4

2 回答 2

1

这是在URI::_query::query_form()中硬编码的。它将空格转换为 +。

 $val =~ s/ /+/g;

然后它使用连接对调用 URI::_query::query,其中唯一的 + 符号应该是编码的空格。最简单的做法可能是使用Hook::LexWrap拦截对 URI::_query::query的调用,在调用开始之前修改参数,以便您可以将 + 转换为 %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 回答