<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

Submit是查詢(xún)或重填,有 查 詢(xún) 和 重 填 兩種值

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

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

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

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

導入HttpClient的4個(gè)包c(diǎn)ommons-codec、commons-httpclient、commons-logging、log4j。

//實(shí)例化HttpClient

HttpClient client = new HttpClient();

//Stream頁(yè)面里面有Host地址 端口是80

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

//用目標地址 實(shí)例一個(gè)POST方法

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

//將需要的鍵值對寫(xiě)出來(lái)

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

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

NameValuePair submit = new NameValuePair(submit , 查詢(xún)));

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});

//執行POST方法

client.executeMethod(post);

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

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

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

//將返回的內容格式化為String存在html中

String html = new String(buff);

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

post.releaseConnection();

//StreamTool類(lèi)如下

public class StreamTool {

/**

* 從輸入流中獲取數據

* @param inputStream 輸入流

* @return 字節數組

* @throws Exception

*/

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

{

//實(shí)例化一個(gè)輸出流

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

//一個(gè)1024字節的緩沖字節數組

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();

}

}

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

System.out.println(html);

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

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

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

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

就將上段代碼中的

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

改為

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



關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>