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

Perl 我可以在WWW::Mechanize的帖子中将空格编码为%20吗?,perl,http,mechanize,lwp,Perl,Http,Mechanize,Lwp,我用它来做一些标准的网站遍历,但有一次我必须构造一个特殊的POST请求并发送它。所有这些都需要会话cookie 在我发出的POST请求中,空格被编码为+符号,但我需要将它们编码为%20 我不知道如何改变这种行为。我意识到它们是等价的,但出于我无法控制的原因,这是我必须做的 感谢您的帮助。这似乎是在URI::\u query::query\u form()中硬编码的。我会有条件地根据全局的$URI::DEFAULT\u QUERY\u FORM\u分隔符修改它,并将您的更改提交给URI维护器 除此

我用它来做一些标准的网站遍历,但有一次我必须构造一个特殊的POST请求并发送它。所有这些都需要会话cookie

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

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


感谢您的帮助。

这似乎是在URI::\u query::query\u form()中硬编码的。我会有条件地根据全局的$URI::DEFAULT\u QUERY\u FORM\u分隔符修改它,并将您的更改提交给URI维护器

除此之外,也许您可以使用LWP::UserAgent请求\u准备回调处理程序?

这是硬编码的。它将空格转换为+

 $val =~ s/ /+/g;
然后,它使用连接对调用URI::\u query::query,其中唯一的+符号应该是编码的空格。最简单的方法可能是拦截对URI::\u query::query with的调用,在调用开始之前修改参数,以便将+转换为%20,然后继续

更烦人的一点是重新定义URI::\u query::query。它没有那么长,您只需要在子例程的开头添加一些代码,以便在继续之前转换参数

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


我有两章介绍如何在中处理方法重写和动态子例程。诀窍是在不更改原始源的情况下执行此操作,这样就不会给其他人带来新问题。

为什么您认为$URI::DEFAULT\u QUERY\u FORM\u DELIMITER与此有关?这是两人之间的事。这是一个查询表单硬编码s//+//g的问题@布莱恩·福伊:我不知道。我建议做一个类似的黑客来覆盖URI的空间编码。更好的办法是用其他人可以使用的方式来修复它,并且如果有人做了类似将URI翻译成XS这样的事情,它不会被悄悄破坏。