Perl/WWW-Mechanize 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Perl/WWW-Mechanize 는 읽기 전용 페이지입니다.
Cpan:WWW::Mechanize == # UTF-8이 아닌 사이트에 폼 전송할 때 문자열 인코딩 문제 == * [http://kldp.org/node/114126 Perl의 WWW::Mechanize로 euc-kr 인코딩 쓰는 사이트에 폼 전송할 때 문자열이 UTF-8인코딩되어 버리는 오류 | KLDP] - KLDP와 펄스터디 까페에 질문 ** [http://groups.google.com/group/www-mechanize-users/browse_thread/thread/7a0cf5cff0c1817c?tvc=2&pli=1 problem about posting non-utf8 data - WWW::Mechanize users | Google 그룹스] - 중국 사람도 같은 문제를 겪었었다 ** aero님께서 답을 주셔서 해결됨 ** http://code.google.com/p/www-mechanize/issues/detail?id=101 - Mechanize 모듈 버그리포트에도 올라와 있긴 하다. {{{#!vim perl # 폼의 캐릭터셋을 지정하고 $mech->form_name("form_edit")->accept_charset("euc-kr"); # submit_form할 때 넘겨주는 데이타는 디코드된 스트링으로 넘겨줌 }}} == # content() 메쏘드의 반환값 == WWW::Mechanize를 써서 get()한 후 content()를 써서 웹 페이지의 내용을 반환받을 때, 이전에는 raw data, 즉 바이트 스트림으로 반환되었는데, 어느 버전에서부터인가 decode된 스트링으로 반환된다. 따라서 받은 후에 다시 decode를 할 필요가 없다. (기존 모듈에 맞춰 작성했던 것은 수정해주어야 함) [http://cpansearch.perl.org/src/JESSE/WWW-Mechanize-1.72/Changes Change 문서]를 보면 아마도 2008.9.27에 나온 1.49_01 버전부터 인 듯. 문제는, 항상 디코드되는 게 아니라, 웹페이지의 인코딩이 뭔지 알 수 없거나 실패할 경우는 디코드하지 않은 상태로 반환하기 때문에, 반환값을 일일이 검사해야 하는 경우가 있다. 예를 들어 euc-kr로 인코딩한 웹페이지인데 메타 태그에는 iso-2022라고 적혀 있는 식이라면 디코드하지 못 한다. == # get()에서 실패하면 die ==
get($url)
해서 웹페이지를 긁어올 때 404에러 등이 나면 그 시점에 die해 버린다. [http://cpansearch.perl.org/src/JESSE/WWW-Mechanize-1.72/Changes Changes]를 보면 1.49_01부터는 autocheck 의 기본값이 1로 되어 있어서 그렇다.
new(autocheck => 0)
으로 하고 직접 리턴값 또는 success 를 불러서 검사할 수 있다. == # 객체의 메모리 사용량 지속 증가 == 크롤링 봇 등 장시간 사용되는 프로그램의 메모리 사용량이 지속적으로 증가하여 살펴보니 Mechanize 객체의 크기가 계속 커지고 있었다. 그래서 객체 하나를 계속 사용하지 않고 필요할 때마다 새로 생성하고 버리는 식으로 했는데, 문서를 보니 방문 페이지 히스토리를 담는 스택의 크기가 무한대여서 그랬던 듯. 객체를 생성할 때 `stack_depth => 고정값` 옵션을 주니 그 후로는 이런 문제 없음
아 놔 영어권 사람들이라 이게 얼마나 심각한 문제인지 몰랐나 이 사람들... 기존에는 웹페이지 읽은 후에 수동으로 디코드 한 번 해 주던 걸 죄다 찾아서 지워야 하고 그랬더니 반대로 전에는 그냥 그 데이타를 넘겨주면 되던걸 인코드해줘야 하고...
----
---- [[컴퓨터분류]]
Perl/WWW-Mechanize
페이지로 돌아가기 |
다른 수정본 보기