我来猜想CMWAP的对请求的处理方式。

众所周知,CMWAP是一个网关,同时又是一个代理服务器,我们只知道

J2ME这样写是没有问题的

假设我请求的地址是http://www.uc.cn/a.do?url=http://www.javaeye.com

 

 httpConn = (HttpConnection) Connector.open(Common.stringAppend("http://10.0.0.172
/a.do?url=http://www.javaeye.com", 3, true);
            if (aProxy != null) {
                httpConn.setRequestProperty("X-Online-Host", "www.uc.cn);
            }

 

 

这样写,对于WTK,Nokia S40的处理机制。他们转换成Soket后是这么写的

 

SocketConnection socket =
								(SocketConnection) javax.microedition.io.Connector.open("socket://10.0.0.172:80");
							OutputStream os = socket.openOutputStream();
							os.write(toByte("GET /a.do?url=http://www.javaeye.com HTTP/1.1/r/n"));               
                                                      os.write(toByte("Host: 10.0.0.172/r/n"));
                                                          os.write(toByte("X-Online-Host: www.uc.cn/r/n/r/n"));

 网关对上面写法的处理并不能达到你的期望。

 

对于Socket层来说,我们应该处理成一个标准的代理方式,只有这样,才能达到我们期望的结果。

 

SocketConnection socket =
								(SocketConnection) javax.microedition.io.Connector.open("socket://10.0.0.172:80");
							OutputStream os = socket.openOutputStream();
							os.write(toByte("GET http://10.0.0.172/a.do?url=http://www.javaeye.com HTTP/1.1/r/n"));

                                                        

                                                          os.write(toByte("Host: 10.0.0.172/r/n"));
                                                          os.write(toByte("X-Online-Host: www.uc.cn/r/n/r/n"));

 这样写,就能达到我们想要的结果,而且这也是代理服务器的标准写法。

 

从上面的一些数据分析,我猜想移动网关的处理方式是:
我们以http://10.0.0.172/a.do?url=http://www.uc.cn/ 的方式进行处理
处理步骤
1. 获取host字段,J2ME的HttpConnection send header是host: 10.0.0.172,
   那么移动先分析此字段。
  
2. 如果Host字段是10.0.0.172, 那么会去查找X-Online-Host字段,并且代理发送的时候把Host植替换成X-Online-Host的植,
   如果非10.0.0.172,则直接走HTTP标准的代理方式。

3. 如果Host字段是10.0.0.172, CMWAP还会分析URI(/a.do?url=http://www.uc.cn/)。如果你的URI里面带有http://关键字的话
   那么问题就会出现了,它会认为http://是host具备的字段,因此它会分析http://www.uc.cn并且把host后面的字符传当成URI。
   最终导致了你请求以http://10.0.0.172/a.do?url=http://www.uc.cn/ 变成了请求以http://10.0.0.172/了,服务一般会return
   500 内部错误。
 
具体大家可以编写想过的代码试试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值