HttpURLConnection获取url 302地址

有时候需要从访问的url地址中取出302地址,自己做处理(当然,是针对一次重定向)


public void onStartTest() {

    new Thread(new Runnable() {
        @Override
        public void run() {
            test302();
        }
    }).start();
}

private void test302() {
    String strUrl = "http://www.sogou.com";
    try {
        HttpURLConnection urlConnection = getConnection(strUrl);
        urlConnection.connect();
        if (urlConnection.getResponseCode() == 302) {
            String url302 = urlConnection.getHeaderField("Location");
            if (TextUtils.isEmpty(url302)) {
                url302 = urlConnection.getHeaderField("location"); //临时重定向和永久重定向location的大小写有区分
            }
            if (!(url302.startsWith("http://") || url302.startsWith("https://"))) { //某些时候会省略host,只返回后面的path,所以需要补全url
                URL originalUrl = new URL(strUrl);
                url302 = originalUrl.getProtocol() + "://" + originalUrl.getHost() + ":" + originalUrl.getPort() + url302;
            }
            if (mCallback != null) {
                mCallback.callback(url302);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

/**
 * 获取GET连接
 *
 * @param strUrl 连接的地址
 * @return 连接对象
 * @throws IOException
 */
private HttpURLConnection getConnection(String strUrl) throws IOException {
    URL url = new URL(strUrl);
    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
    httpURLConnection.setUseCaches(false);
    httpURLConnection.setInstanceFollowRedirects(false); //设置成false,则需要自己从http reply中分析新的url自己重新连接。
    httpURLConnection.setConnectTimeout(10000);
    httpURLConnection.setReadTimeout(10000);
    return httpURLConnection;
}










评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值