開發任意網站Android客戶端

開發Android網站客戶端通常有兩種方法:
第一種,通過服務端的開放平臺,調用提供的API接口來開發,比如說淘寶開放平臺,新浪微博之類的;
第二種,服務端沒有提供任何接口,你也沒有服務端任何數據庫訪問權限,就是一個純純粹粹的網站,要你做客戶端。今天,我要和大家分享的正是第二種情況。
首先需要準備一個工具:httpWatch.這是一個網頁數據分析工具.可以查看到你發送/接受的數據.特別是post提交的數據,在某些需要登錄的網頁中尤爲重要.
附件下載 HttpWatchPro-ha-crack.zip

 

這個軟件是以插件的形式存在於IE中的,支持IE6-9,使用的時候像這樣就可以了.
spacer.gif
點擊錄製,然後在瀏覽器輸入地址打開.就可以看到數據哦.以百度爲例
spacer.gif
可以看到百度的首頁其實包含了很多鏈接.有圖片的,css樣式的,當然我們最關心的還是那個目標地址爲www.baidu.comget請求.
在這個請求的"內容"標籤裏面可以看到網頁返回的html數據.裏面包含了各個鏈接的地址.如何解析出來呢?
當然你可以用xml的解析方法.但是這個html的標籤實在太多了...不管用xml的哪種解析方式都是折騰人.還好我們有一個專門解析html的工具jsoup.
jsoup 是一款Java HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOMCSS以及類似於jQuery的操作方法來取出和操作數據.android使用的時候,導入這個jar包就可以了.
附件下載 jsoup-1.7.1.jar
下面來一個解析示例,是我代碼裏面的一部分.

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

publicvoidhandResponse(MyHttpResponse myHttpResponse) {

        Document doc;

        if(myHttpResponse.getPipIndex() == NetConstant.HOMEPAGE) {

            doc = myHttpResponse.getData();

            Elements hidden_inputs = doc.select("input[type=hidden]");

            for(Element ele : hidden_inputs) {

                String[] arr =newString[] {

                        ele.attr("name"), ele.attr("value")

                };

                Globe.sHideParams.add(arr);

            }

            hidden_inputs = doc.select("input[type=submit]");

            Globe.sHideParams.add(newString[] {

                    hidden_inputs.get(0).attr("name"), hidden_inputs.get(0).attr("value")

            });

            System.out.println("獲取首頁信息成功");

            // System.out.println(doc);

        }

    }

 


Elements hidden_inputs = doc.select("input[type=hidden]"); 這是關鍵的一句,是從這個html字符串轉化來的doc文件中,查找所有type屬性等於hiddeninput標籤.
doc.select後面放的是css選擇器.我也不會用,不過用着用着就熟練了~~~比如查找所有的超鏈接就是.select("a[href]");
至於找到以後的Elements相關方法更是豐富,具體可以看看這個API:http://jsoup.org/apidocs/org/jsoup/nodes/Element.html
找到了之後就簡單了對吧,點擊按鈕,發送請求,然後解析數據,獲得下一批鏈接地址.

關於cookie的應用:(可能是我第一次用這個,又或者是我試驗的網站比較簡單,所以可能有不完善的地方)
cookie可以理解爲一些信息,你每次請求數據的時候都會用,但是當你做登陸之類的操作時,如果你登陸成功了,服務器會保存記錄你登陸成功時用的cookie.下次你訪問的時候就可以選擇了.如果在請求的header裏面附上這個cookie,服務器就認爲你登陸了.那麼你請求一些需要登陸才能查看的信息時,就不會提示你登陸了.
獲取cookie的代碼:

01

02

03

04

05

06

07

08

09

10

if(req.getPipIndex() == NetConstant.LOGIN) {

                                        CookieStore store = client.getCookieStore();

                                        List<Cookie> cookies = store.getCookies();

                                        if(cookies.isEmpty()) {

                                        }else{

                                            mCookie = cookies.get(0);

                                            mCookieString = mCookie.getName() +"="

                                                    + mCookie.getValue();

                                        }

                                    }

 


將這個cookie保存起來待用.
附加cookie的代碼:
post.setHeader("Cookie", Globe.sCookieString);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章