문제

나는 www :: mechanize를 사용하고 있으며 현재 'HTTP 응답을'Content-Encoding: gzip'응답 헤더를 먼저 확인한 다음 io :: uncompress :: gunzip을 사용하여 압축되지 않은 컨텐츠를 얻음으로써 내 코드의 헤더.

그러나 www :: mechanize worm (), links () 등과 같은 메소드가 작동하고 압축되지 않은 컨텐츠를 구문 분석하도록 투명 하게이 작업을 수행하고 싶습니다. www :: mechanize는 lwp :: useragent의 하위 클래스이므로 lwp :: ua :: 핸들러 이것을하기 위해.

나는 부분적으로 성공했지만 (예를 들어 압축되지 않은 콘텐츠를 인쇄 할 수 있음) 전화 할 수있는 방식으로 투명하게 할 수 없습니다.

$mech->forms();

요약 : $ mech 오브젝트 내부의 내용을 어떻게 "교체"하여 해당 시점에서 모든 www :: Mechanize 메소드가 컨텐츠 인코딩이 발생하지 않는 것처럼 작동합니까?

나는 당신의 관심과 도움에 감사드립니다. 감사

도움이 되었습니까?

해결책

www :: mechanize :: gzip, 제 생각에는.

다른 팁

$ res-> content ($ bytes) 멤버를 사용하여 대체 할 수있는 것처럼 보입니다.

그건 그렇고, 나는 lwp :: useragent의 출처를보고 http :: 응답을 통해이 것들을 찾았습니다. http :: 메시지.

그것은 userAgent와 함께 내장되어 기계화됩니다. 하나의 주요 경고 머리카락을 구하기 위해

-디버그하려면 오류를 확인하십시오 $@ decoded_content 호출 후.

$html = $r->decoded_content;
die $@ if $@;

더 나은 것은 http :: 메시지의 출처를 살펴보고 모든 지원 패키지가 있는지 확인하십시오.

제 경우에는 Decoded_Content가 undef를 반환했지만 콘텐츠는 Raw Binary이고 야생 거위 추격을했습니다. UserAgent는 디코딩 실패시 에러 플래그를 설정하지만 Mechanize는이를 무시합니다 (발생률을 자체 오류/경고로 점검하거나 기록하지 않음).

내 경우 $@ sez : "io/html.pm을 찾을 수 없습니다 .. 그것은 평가되었습니다.

소스로 뛰어 들면 내장 디코딩 프로세스가 길고 세심하며 힘든 일이라는 것을 알게되며 거의 모든 시나리오를 다루고 많은 추측을합니다 (감사합니다!).

편집증 인 경우 New ()의 모든 요청과 함께 사용할 기본 헤더를 명시 적으로 설정하십시오.

    $browser = new WWW::Mechanize('default_headers' => HTTP::Headers->new('Accept-Encoding' 
                            => scalar HTTP::Message::decodable()));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top