[첫화면으로]Perl/WWW-Mechanize

마지막으로 [b]

10 번째 수정본
(10 번째 수정본부터 10 번째 수정본까지의 변경사항) (소소한 수정)
(두 수정본의 내용이 동일하거나, 수정본을 비교할 수 없음.)
Cpan:WWW::Mechanize

1. UTF-8이 아닌 사이트에 폼 전송할 때 문자열 인코딩 문제

    # 폼의 캐릭터셋을 지정하고
    $mech->form_name("form_edit")->accept_charset("euc-kr");
    # submit_form할 때 넘겨주는 데이타는 디코드된 스트링으로 넘겨줌

2. content() 메쏘드의 반환값

WWW::Mechanize를 써서 get()한 후 content()를 써서 웹 페이지의 내용을 반환받을 때, 이전에는 raw data, 즉 바이트 스트림으로 반환되었는데, 어느 버전에서부터인가 decode된 스트링으로 반환된다. 따라서 받은 후에 다시 decode를 할 필요가 없다. (기존 모듈에 맞춰 작성했던 것은 수정해주어야 함)

[Change 문서]를 보면 아마도 2008.9.27에 나온 1.49_01 버전부터 인 듯.

문제는, 항상 디코드되는 게 아니라, 웹페이지의 인코딩이 뭔지 알 수 없거나 실패할 경우는 디코드하지 않은 상태로 반환하기 때문에, 반환값을 일일이 검사해야 하는 경우가 있다. 예를 들어 euc-kr로 인코딩한 웹페이지인데 메타 태그에는 iso-2022라고 적혀 있는 식이라면 디코드하지 못 한다.

3. get()에서 실패하면 die

get($url) 해서 웹페이지를 긁어올 때 404에러 등이 나면 그 시점에 die해 버린다. [Changes]를 보면 1.49_01부터는 autocheck 의 기본값이 1로 되어 있어서 그렇다. new(autocheck => 0)으로 하고 직접 리턴값 또는 success 를 불러서 검사할 수 있다.

아 놔 영어권 사람들이라 이게 얼마나 심각한 문제인지 몰랐나 이 사람들... 기존에는 웹페이지 읽은 후에 수동으로 디코드 한 번 해 주던 걸 죄다 찾아서 지워야 하고 그랬더니 반대로 전에는 그냥 그 데이타를 넘겨주면 되던걸 인코드해줘야 하고...
-- Raymundo 2012-2-23 11:52 pm
이름:  
Homepage:
내용:
 


컴퓨터분류

이 수정본 편집일: 2012-3-14 4:37 pm (변경사항 [d])
1940 hits | Permalink | 변경내역 보기 [h] | 현재 수정본 보기 | 10 번째 수정본 소스 보기