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,最終咱們的代理地址變成了廣州移動的代理地址