Android HttpUrlConnection 访问cmwap

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



<!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,最终我们的代理地址变成了广州移动的代理地址

本文出自 “雨轩印象” 博客,转载请与作者联系!

你可能感兴趣的:(httpclient,android,CMWAP)