<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一步步教你為網(wǎng)站開發(fā)Android客戶端

          一步步教你為網(wǎng)站開發(fā)Android客戶端

          作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

          Submit是查詢或重填,有 查 詢 和 重 填 兩種值

          至此,我們弄清楚了POST Data里所有內(nèi)容的含義和取值可能。但我們模擬POST請求為什么,其實就是為了得到搜索的書目信息,所以我們看一下返回的Content是不是我們要的東西

          果然,就是我們搜到的書目信息,就以String的形式放在Content里面。最后我們查看一下Stream,截圖,以防等下我們需要這里面的東西

          好了,這個頁面的工作原理我們已經(jīng)弄清楚了:用戶在網(wǎng)頁中輸入搜索內(nèi)容后,點擊查詢,瀏覽器會POST一個Data到目標(biāo)網(wǎng)址,該網(wǎng)址的返回信息就是搜到的書目。

          我們開始編寫代碼,模擬這個過程,先打開eclipse建立一個Java項目(注意是Java項目,因為Java項目可以完美移植到Android項目中且調(diào)試方便,并且模擬Http請求這一過程沒有用到任何Android功能)。

          導(dǎo)入HttpClient的4個包commons-codec、commons-httpclient、commons-logging、log4j。

          //實例化HttpClient

          HttpClient client = new HttpClient();

          //Stream頁面里面有Host地址 端口是80

          client.getHostConfiguration().setHost(http://coin.lib.scuec.edu.cn, 80);

          //用目標(biāo)地址 實例一個POST方法

          PostMethod post = new PostMethod(http://coin.lib.scuec.edu.cn/cgi-bin/IlaswebBib);

          //將需要的鍵值對寫出來

          NameValuePair beg = new NameValuePair(FLD_DAT_BEG , “”);

          NameValuePair end = new NameValuePair(FLD_DAT_END , “”);

          NameValuePair submit = new NameValuePair(submit , 查詢));

          NameValuePair vIndex = new NameValuePair(v_index , “TITLE”);

          NameValuePair vLogicSrch = new NameValuePair(v_LogicSrch , 0);

          NameValuePair vPagenum = new NameValuePair(v_pagenum , 10);

          NameValuePair vSeldatabase = new NameValuePair(v_seldatabase , 0);

          NameValuePair vValue = new NameValuePair(v_value ,”android”);

          //給POST方法加入上述鍵值對

          post.setRequestBody(new NameValuePair[] {beg , end , submit , vIndex , vLogicSrch , vPagenum , vSeldatabase , vValue});

          //執(zhí)行POST方法

          client.executeMethod(post);

          //將POST返回的數(shù)據(jù)以流的形式讀入,再把輸入流流至一個buff緩沖字節(jié)數(shù)組

          //StreamTool類是我自己寫的一個工具類,其內(nèi)容將在下文附出

          byte[] buff = StreamTool.readInputStream(post.getResponseBodyAsStream());

          //將返回的內(nèi)容格式化為String存在html中

          String html = new String(buff);

          //任務(wù)完成了,釋放連接

          post.releaseConnection();

          //StreamTool類如下

          public class StreamTool {

          /**

          * 從輸入流中獲取數(shù)據(jù)

          * @param inputStream 輸入流

          * @return 字節(jié)數(shù)組

          * @throws Exception

          */

          public static byte[] readInputStream(InputStream inputStream) throws Exception

          {

          //實例化一個輸出流

          ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

          //一個1024字節(jié)的緩沖字節(jié)數(shù)組

          byte[] buffer = new byte[1024];

          int len = 0;

          //讀流的基本知識

          while ((len=inputStream.read(buffer)) != -1) {

          outputStream.write(buffer, 0, len);

          }

          //用完要關(guān),大家都懂的

          inputStream.close();

          return outputStream.toByteArray();

          }

          }

          現(xiàn)在,我們得到了POST方法返回的String,我們輸出到控制臺看看是什么

          System.out.println(html);

          沒錯,就是我們上文看到的HttpWatch 抓到的返回Content,也就是一段HTML代碼,這說明,我們模擬瀏覽器POST請求成功了!

          我們再試試別的搜索內(nèi)容,來一個”android開發(fā)”(即將v_value鍵值對的值改成”android開發(fā)”),這時運行后,我們卻從控制臺得到了這樣的結(jié)果:

          經(jīng)過幾次試驗后,發(fā)現(xiàn)一個規(guī)律,只要搜索內(nèi)容中包括中文,就搜不到。

          所以可以判定是中文編碼的問題,(在開發(fā)這類客戶端時候,中文編碼往往是個很具困難的問題。安卓巴士開發(fā)3群的某群友提到:服務(wù)器交流用的編碼是”ISO-8859-1”,跟我起初用到的編碼一致,但真實性仍需考證)所以我們修改上面的代碼,將代表搜索內(nèi)容的v_value對應(yīng)的值編碼為”ISO-8859-1”

          就將上段代碼中的

          NameValuePair vValue = new NameValuePair(v_value ,”android”);

          改為

          NameValuePair vValue = new NameValuePair(v_value , new String(“android開發(fā)”.getBytes(),ISO-8859-1));



          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();