Android HttpUrlConnection 访问cmwap

我们知道Android下主要有两种直接的Http联网方式,一种是java原生的HttpUrlConnection,另一种是apache的HttpClient。这两种联网方式没有特殊的需求的时候都能满足我们的联网需要。

各自特点:

1.HttpUrlConnection只是对socket做了封装,对Http协议本身的封装不是太多;用起来代码稍微复杂,联网时用户能够插入更多的操作。

2.HttpClient对Http的封装比较好,用起来代码简单,但用户能够控制的部分比较少

一般情况下在不涉及文件上传下载,或是其他进度回调时,使用HttpClient成本比较低。如果程序需要获取联网进度回调等,则应该采用HttpUrlConnection。

从以上的角度来看,HttpUrlConnection可以完成HttpClient的全部功能。

但是,

对于某些及其特殊的情况,即本文要讨论的,采用HttpUrlConnection则不行,而必须使用HttpClient

前段时间在涉及广州移动CMWap代理的时候,请求的代理地址会被重定向到gd.10086.cn。

假如我们现在要访问地址:http://zilla.blog.51cto.com/3095640/921153

我们在CMWap的环境下设置了代理为:10.0.0.172端口为80

最终我们的抓包数据位:

HTTP/1.1 302 Found

Date: Wed, 11 Jul 2012 07:17:34 GMT

Server: IBM_HTTP_Server

Location: http://www.gd.chinamobile.com/3095640/921153

Vary: Accept-Encoding

Content-Type: text/html; charset=iso-8859-1

Content-Length: 237

Connection: Keep-alive

Via: 1.1 AN-0001544157030075





302 Found

Found


The document has moved 3095640/921153">here.


即我们最终访问的位置变成了,http://www.gd.chinamobile.com/agent/3095640/921153,而这个页面并不存在,服务器端将其变成了一个跳转页面。

 

 下面来看我们的request信息:

POST Http://zilla.blog.51cto.com/3095640/921153 HTTP/1.1

x-online-host: zilla.blog.51cto.com:80

User-Agent: Dalvik/(这里回避一下)

Host: zilla.blog.51cto.com:80

Connection: Keep-Alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 0

中间经历了ICMPV6——>DNS——>DNS——>DNS——>DNS,最终我们的代理地址变成了广州移动的代理地址