至于大家多wap和net网络的理解,我就不在这解释更多了。度娘等着您呢!
我们在请求 http 数据的时候,一般使用 HttpURLConnection 或者 HttpClient ,在请求webservice的时候,习惯使用 KSoap。在net网络下使用毫无压力,但是遇到了该死的wap网络,却发现怎么都是抛异常,实属无奈呀!
众所周知,在国内的GPRS网络环境下,用户以cmwap接入点上网的情况居多。cmwap是中国移动的GPRS代理上网,因此在创建连接的时候,必须采用代理的方式进行连接。
假设我连接的URL为:http://wap.uc.cn/;
在标准代理中,是这样子的:
Conection to 10.0.0.172:80
GET http://wap.uc.cn/ HTTP/1.1
Host: wap.uc.cn
但是在J2ME中,实际在android中也是一样的。程序并不能控制到TCP层,因此中国移动定义了一个私有协议字段:X-Online-Host。从移动要求的规范来看,我们只需要这样设置即可正常进行联网:
Conection to 10.0.0.172:80
GET / HTTP/1.1
Host: 10.0.0.172
X-Online-Host: wap.uc.cn
实际上对于程序来说,我们只需要将原来连接的url及http header中的host替换成10.0.0.172,并添加一个http header字段:X-Online-Host,值为原来的host。然后继续采用直连的方式即可正常进行联网。
如果你的手机是电信的,且当前网络为wap的时候
只需要简单的设置上网关即可,
java.net.Proxy p = null; p = new java.net.Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress(“10.0.0.200”,“80”)); URLConnection conn = url.openConnection(proxy);
然而,当你遇到中国移动和中国联通的时候,如果判断当前网络又为wap的时候,那就麻烦一点了
1、需要加上网关,即需要先设置代理
例如:
java.net.Proxy p = null; p = new java.net.Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress(“10.0.0.172”,“80”)); URLConnection conn = url.openConnection(proxy);
2、假设我连接的URL为:http://wap.uc.cn
需要把原来的url替换为 :http://10.0.0.172
紧接着在请求头中,加上两个字段,分别为:
X-Online-Host: wap.uc.cn
Accept:*/*
这样按照以上两步,提交请求就大功搞成了。至于为什么不懂“10.0.0.200”和“10.0.0.172”哪儿来的,自己就又度娘一下吧。
另外说明一下,那些一直出现