您的位置:首页 > 理论基础 > 计算机网络

Android使用HttpURLConnection的302重定向问题

2017-06-28 15:03 1251 查看


HttpURLConnection编程基础原理

在Android中,HttpURLConnection是比较基础的网络编程,因此在入门的时候建议大家学会使用这个编程,有助于大家了解其原理。这里就简单介绍一下,因为我们这篇博客主要解决的问题是如何解决收到结果不是200,--------------


而是302重定向问题。


使用HttpURLConnection编程原理

我们编程时候遵循一下几个步骤:

创建一个URL对象
URL url = new URL(http://www.baidu.com);
1

利用HttpURLConnection对象从网络中获取网页数据
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
1

设置连接超时
conn.setConnectTimeout(6*1000);
1

对响应码进行判断
if (conn.getResponseCode() != 200)    //从Internet获取网页,发送请求,将网页以流的形式读回来

throw new RuntimeException("请求url失败");
1
2
3

得到网络返回的输入流
InputStream is = conn.getInputStream();
1


响应码不是200时而是302时,解决办法

首先需要获取head头里面的location内容,因此地址被重定向了,因此我们需要获取对应的重定向的地址。
String url_str = et_url.getText().toString().trim();
URL url  = new URL(url_str);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(3000);
//Toast.makeText(mContext,urlConnection.getResponseCode() + "", 0).show();
System.out.println("getResponseCode"+urlConnection.getResponseCode()+


以上就是原始代码了,因此我们应该获取其head中的location,查看现在的地址
String location = urlConnection.getHeaderField("Location");
System.out.println("location"+location+"");


拿到了新的地址,接下来我们应该寻找这个新的地址了
url  = new URL(location);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(3000);

if(urlConnection.getResponseCode() == 200){
InputStream in = urlConnection.getInputStream();
String result = StreamUtils.getResult(in);

if(result != null){
Message msg = new Message();
msg.obj = result;
handler.sendMessage(msg);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android http