Android HttpUrlConnection 访问cmwaphtml
咱们知道Android下主要有两种直接的Http联网方式,一种是java原生的HttpUrlConnection,另外一种是apache的HttpClient。这两种联网方式没有特殊的需求的时候都能知足咱们的联网须要。java
各自特色:apache
1.HttpUrlConnection只是对socket作了封装,对Http协议自己的封装不是太多;用起来代码稍微复杂,联网时用户可以插入更多的操做。服务器
2.HttpClient对Http的封装比较好,用起来代码简单,但用户可以控制的部分比较少app
通常状况下在不涉及文件上传下载,或是其余进度回调时,使用HttpClient成本比较低。若是程序须要获取联网进度回调等,则应该采用HttpUrlConnection。socket
从以上的角度来看,HttpUrlConnection能够完成HttpClient的所有功能。ide
可是,url
对于某些及其特殊的状况,即本文要讨论的,采用HttpUrlConnection则不行,而必须使用HttpClientspa
前段时间在涉及广州移动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
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://www.gd.chinamobile.com/3095640/921153">here</a>.</p>
</body></html>
即咱们最终访问的位置变成了,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,最终咱们的代理地址变成了广州移动的代理地址