原來要改 Header 啊!

我一直有在用 mrtg 在統計一些無聊的數據,其實也沒什麼特別的,大概就是去抓一些網路上的數據,叫他定期幫我畫個統計圖而已,資料比較隱私,就不方便公佈了。

因為網頁的格式、內容不那麼一成不變,之前也曾經遇過必須要調整 regular expression 格式才能正確抓到資料的情形,那次好像也搞了一陣子吧!只能說自己目前這個情形,除了努力在醫院裡混下去外,大概也沒有別的路可以選。

最近該 script (用 WWW::Mechanize perl module 拼成的) 似乎又出了點問題,把抓回來的網頁資料吐出來看,怎麼編碼跟我自己用瀏覽器抓回來的不一樣,在 ISO-8859-1 下,WWW::Mechanize 居然不是吐亂碼,而是把不屬於該範圍的字全部刪掉了,只剩英文、符號和數字的內容當然會 parse 錯誤!

一開始往 WWW::Mechanize 亂刪內容去找,沒什麼收穫,後來想到瀏覽器似乎會送出一些什麼,server 根據這些資訊它想吐的內容,這時又在 WWW::Mechanize 的 FAQ 裡找到:

“It works in Firefox, but why not Mech?” Everything the web server knows about the client is present in the HTTP request. If two requests are identical, the results should be identical.

裡頭也推薦了一個 Firefox extension — Tamper Data — 來看 request header,然後把 firefox 送出的 header 也交給 Mech 去送,一切就恢復正常啦。(不過應該說之前就一直都不正常才對。^^a)

把原先 88 行的 code 縮到 56 行,總共花了四個小時左右,唉唉~看來我還是努力的念 Washington 就好了。T_T

2008.05.10

Leave a Reply