문제

나는 약간의 웹 빌딩을하려고 노력하고 있지만 www : mechanize gem은 인코딩과 충돌을 좋아하지 않는 것 같습니다.
게시물 요청은 302 리디렉션 (지금까지 기계화가 너무 좋음)을 발생시키고 결과 페이지가 충돌하는 것으로 보입니다. 나는 꽤 많이 봤지만 지금까지 이것을 해결하는 방법은 아무것도 나오지 않았다. 아이디어가 있습니까?

암호:

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new

agent.user_agent_alias = 'Mac Safari'
answer = agent.post('https://www.budget.de/de/reservierung/privatkunden/step1/schnellbuchung',
{"Country" => "Deutschland",
"Abholstation" => "Aalen",
"Abgabestation" => "Aalen",
"Abholdatum" => "26.02.2009",
"Abholzeit_stunde" => "13",
"Abholzeit_minute" => "30",
"Abgabedatum" => "28.02.2009",
"Abgabezeit_stunde" => "13",
"Abgabezeit_minute" => "30",
"CountryID" => "DE",
"AbholstationID"=>"AA1",
"AbgabestationID"=>"AA1"
}
)
puts answer.body

오류:

D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/util.rb:29:in `iconv': "\204nderungen vorbe"... (Iconv::IllegalSequence)
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/util.rb:29:in `to_native_charset'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain/response_header_handler.rb:29:in `handle'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain.rb:30:in `pass'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain/handler.rb:6:in `handle'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain/response_body_parser.rb:35:in `handle'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain.rb:30:in `pass'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain/handler.rb:6:in `handle'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain/pre_connect_hook.rb:14:in `handle'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize/chain.rb:25:in `handle'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize.rb:494:in `fetch_page'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize.rb:545:in `fetch_page'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize.rb:403:in `post_form'
from D:/Ruby/lib/ruby/gems/1.8/gems/mechanize-0.9.1/lib/www/mechanize.rb:322:in `post'
from test.rb:7
도움이 되었습니까?

해결책

이 페이지는 가장 확실하게 UTF-8이지만 Mechanize는 NKF (핵심 루비 라이브러리)를 사용하여 인코딩을 추측하고 어떤 이유로 든 시프트 JI로 나타납니다. 문제를 해결하는 가장 빠른 방법은 기계화를위한 인코딩 매핑을 무시하는 것입니다. 따라서 ICONV를 사용하여 본체를 UTF-8로 변환하려고 시도하면 소스 인코딩에서 UTF-8로 전달됩니다. 당신은 다음과 같이 할 수 있습니다 :

WWW::Mechanize::Util::CODE_DIC[:SJIS] = "UTF-8"

당신이있는 줄 바로 뒤에 놓으십시오 require 기계화 라이브러리. 문제의 근본 원인을 찾은 직후 또는 더 나은 값을 다시 설정하고 필요한 경우 패치를 제출할 수 있습니다.

참고 :이를 해결하는 방식은 역 추적을 사용하여 Mechanize 라이브러리를 디버깅하는 것입니다. 그만큼 to_native_charset 방법 호출 detect_charset 문제가있는 곳입니다.

다른 팁

제 경우에는 a Mechanize::File 인코딩을 전혀 사용하지 않는 Get 메소드에 의해 반환되었습니다.
수동으로 변환하여 고칠 수있었습니다. Iconv, 그러나 이것은 이미 인코딩을 알고있는 경우에만 작동합니다.

result = @agent.get uri
# Mechanize::File instead of Mechanize::Page is returned 
# so we have to convert manually
result = Iconv.conv("utf-8", "iso-8859-1", result.body)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top