延續前幾篇的 HttpConnection 實作,本文示範如何在 CMWAP/CMNET 環境下透過代理模式請求 WML 頁面並解析資料,並總結中國行動網絡開發的關鍵注意事項。
採用執行緒非同步請求,設定 User-Agent、Connection: close 等 Header,支援 CMWAP 代理(10.0.0.172 + X-Online-Host)與 CMNET 直連兩種模式:
private void startRequestHttpImage() {
new Thread() {
public void run() {
HttpConnection conn = null;
InputStream is = null;
try {
append("Start Request");
conn = (HttpConnection) openConnection(url, netType); // 0=CMNET, 1=CMWAP
conn.setRequestMethod(HttpConnection.GET);
conn.setRequestProperty("User-Agent", "Openwave");
conn.setRequestProperty("Connection", "close");
if (conn.getResponseCode() == 200) {
is = conn.openDataInputStream();
byte[] data = readDataFromStream(is, 512);
if (data != null) append(Image.createImage(data, 0, data.length));
}
} catch (Exception e) { append(e.toString()); }
finally { closeQuietly(is); closeQuietly(conn); }
}
}.start();
}
openConnection(String url, int type):依網路類型建立直連或代理連線。readDataFromStream(InputStream, int bufferSize):分塊讀取輸入流至 ByteArrayOutputStream,回傳 byte[]。
掌握上述要點,即可開發出在中國主流行動網絡穩定運行的 J2ME 連網應用。