2011-12-07 2 views
0

잘못 설계된 웹 서버와 통신하려고하지만 여전히 처리하고 싶습니다. 문제는 로그인 양식을 제출할 때 URI 안에 메시지를 포함 시키려합니다. 그러면 URI 라이브러리가 중지됩니다.Mechanize를 사용하여 잘못된 URI로 리디렉션 됨 잘못된 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 

에 저를 리디렉션, 그것을 내가 다시 얻기 위해 요청 하죠 리디렉션 URI, 내부 나에게 구문 분석되지 않은 HTML 코드를 통과하려고. 쉐 쉬, 표준!

그리고 지금 눈에 띄게 열정적 같은 나쁜 관행 화가 URI를 라이브러리는, 내가 당신의 고통, URI LIB를 느낄

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를 정확히 구문 분석하고 URI를 올바르게 구문 분석 (또는 그냥 삭제)하고 아무 일도 일어나지 않은 것처럼 다시 제출할 수 있습니까? 아니면 URI와 Mechanize 사이의 버그입니까?

+0

요청을 구조 블록에 넣으시겠습니까? 어쩌면 코드를 보여줘야 할 것입니다. – pguardiario

+0

@pguardiario 이보다 훨씬 복잡하지 않습니다. 그것은 기본적으로'uri.merge ('<')'이고 나는 리다이렉트에 머물러있다. 또한 URI가 매번 오류를 throw하므로 구조 할 필요가 없습니다. –

+0

그래서 uri.merge ('<')를 직접 호출하고 있습니까? 왜 그것을하고 있습니까? 코드를 보여 주면 우리가 말하는 것에 대해 추측 할 필요가 없습니다. – pguardiario

답변

0

코드를 자세히 살펴본 후에 문제가 발생한 부분을 발견했습니다.

나는 #177에서 설명하고있는 바와 같이 :

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

class Mechanize::Page::MetaRefresh 

def self.parse content, base_uri 
    return unless content =~ CONTENT_REGEXP 

    delay, refresh_uri = $1, $3 

    dest = base_uri 
    dest += refresh_uri if refresh_uri  # Oops! 

    return delay, dest 
end 

에 참조 된 라인 불법 문자 (예 : < 등)를 포함 URI::InvalidURIErrorrefresh_uri 경우 올릴 것이다. 나는 어디에서 위생 처리를해야하는지 잘 모른다. 당신이 궁금하면 내 오류 로그의 URI#merge

죄송합니다 줄에 += 운영자에 숨겨져 있습니다.

관련 문제