关于手机在wap网络下的 HTTP 请求方式
至于大家多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”哪儿来的,自己就又度娘一下吧。
另外说明一下,那些一直出现
java.net.ConnectException: localhost/127.0.0.1 等错误,就是因为没有按照上面两步骤来的。出现的童鞋好好
解决一下吧
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。