我可以在WWW :: Mechanize的POST中将空格编码为%20吗?

时间:2009-09-07 00:32:28

标签: perl http mechanize lwp

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

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

我无法弄清楚如何改变这种行为。我意识到它们是等价的,但由于我手中的原因,这就是我必须做的事情。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

 $val =~ s/ /+/g;

然后使用连接对调用URI :: _ query :: query,其中唯一的+符号应该是编码空格。最简单的做法是拦截对{:: 3}}的URI :: _ query :: query的调用,在调用开始之前修改参数,这样你就可以把+转到%20,然后从那里继续。

更烦人的是重新定义URI :: _ query :: query。它不是那么久,你只需要在子程序的开头添加一些代码,以便在它继续之前转换参数。

或者,您可以在另一侧修复损坏的解析器。 :)

我在Hook::LexWrap中有几章关于处理方法覆盖和动态子例程的章节。诀窍是在不改变原始来源的情况下这样做,这样你就不会为其他人引入新的问题。

答案 1 :(得分:0)

这似乎是在URI :: _ query :: query_form()中硬编码的。我有条件地修改基于全局的内容,就像使用$ URI :: DEFAULT_QUERY_FORM_DELIMITER一样,并将您的更改提交给URI维护者。

除此之外,也许您可​​以使用LWP :: UserAgent request_prepare回调处理程序?