首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重定向到错误的URI并使用Mechanize引发无效URI错误

重定向到错误的URI并使用Mechanize引发无效URI错误
EN

Stack Overflow用户
提问于 2011-12-08 03:56:14
回答 1查看 520关注 0票数 0

我正在尝试与一个设计糟糕的web服务器通信,但我仍然想处理它。问题是,当我提交登录表单时,它会尝试在URI中嵌入消息,这会使URI库停止。

服务器将我重定向到

代码语言:javascript
复制
/path/ConvolutedNameForMenuPage.menu?name=bmenu.P_MainMnu&msg=WELCOME+<b>Welcome,+Jonathan+Allard,+to+our+poorly+designed+Administrative+Systems!<%2Fb>Dec+07,+201102%3A27+PM

没错,它试图在重定向URI中传递给我未解析的HTML代码,我应该请求重定向URI才能将其取回。天啊,标准!

现在,URI库显然对这种糟糕的做法感到非常不安,它惊呼道

代码语言:javascript
复制
URI::InvalidURIError: bad URI(is not URI?): /path/ConvolutedNameForMenuPage.menu?name=bmenu.P_MainMnu&msg=WELCOME+<b>Welcome,+Jonathan+Allard,+to+our+poorly+designed+Administrative+Systems!<%2Fb>Dec+07,+201102%3A27+PM   from /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/uri/generic.rb:1202:in `rescue in merge'
from /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/1.9.1/uri/generic.rb:1199:in `merge'
from /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mechanize-2.0.1/lib/mechanize/page/meta_refresh.rb:32:in `parse'
from /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mechanize-2.0.1/lib/mechanize/page/meta_refresh.rb:41:in `from_node'
from /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mechanize-2.0.1/lib/mechanize/page.rb:282:in `block in meta_refresh'
from /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/nokogiri-1.5.0/lib/nokogiri/xml/node_set.rb:239:in `block in each'
from /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/nokogiri-1.5.0/lib/nokogiri/xml/node_set.rb:238:in `upto'
from /home/jon/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/nokogiri-1.5.0/lib/nokogiri/xml/node_set.rb:238:in `each'

我能感受到你的痛苦,URI lib。

现在,我如何捕获它,正确地解析回URI (或者干脆完全删除它),然后像什么都没发生一样提交回来呢?或者这是一个介于URI和Mechanize之间的bug?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-21 08:26:47

经过对代码的深入研究,我发现了问题的来源。

正如我在#177中解释的那样

/lib/mechanize/page/meta_refresh.rb:40中的

类机械化::页面::MetaRefresh定义self.parse内容,base_uri返回,除非content =~ CONTENT_REGEXP delay,refresh_uri = $1,$3 dest = base_uri dest += refresh_uri if refresh_uri # Oops!返回延迟,目标结束

如果refresh_uri包含非法符号(如<),则引用的行将引发URI::InvalidURIError。不过,我不太知道应该在哪里进行消毒。

如果您想知道,我的错误日志的URI#merge隐藏在oops行的+=操作符中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8421660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档