Android http HttpURLConnection

 /**
  * Http get 请求
  * 
  * @param urlPath
  * 
  * 
  */
 private static String httpConnByGet(RequestUrl ru,Params params){ 
  String token = (String) params.getMap().get("token") ;
  String et = (String) params.getMap().get("et") ;
  params.getMap().remove("et");
  if(token != null ){
   params.getMap().put("token",Md5.md5(token + et + params.getMap().get("uid") + ru.getKeywords()));
  }
  
  String urlPath = ru.getUrl() + HttpURLConstant.QMARK + HttpURLConstant.COMMON_PARAMS + et + params.toString() ; //通用参数的设置
  Log.w("NETURL","geturl:"+urlPath);
  URL url = null;
  HttpURLConnection urlConnection = null;
  
  
  try {
   ByteArrayOutputStream outStream = new ByteArrayOutputStream();
   byte[] data = new byte[2048];    //应该不会小吧!
   int len = 0;
   url = new URL(urlPath);
      urlConnection = (HttpURLConnection) url.openConnection();  
   
//   Class<?> clazz=url.openConnection().getClass();  //看看返回什么鬼类型
//   Class<?> clazzSuper=clazz.getSuperclass();       //父类又是什么鬼啊!
      
   //getInputStream暗中执行了连接,不需要urlConnection.connect();
   urlConnection.setReadTimeout(readTimeout);                                                  // 设置请求的超时时间
   urlConnection.setConnectTimeout(connectTimeout);
   if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
    
    InputStream inStream = urlConnection.getInputStream();   //获取输入流,此时才真正建立链接
    while ((len = inStream.read(data)) != -1) {
     outStream.write(data, 0, len);
    }
    
    inStream.close();
   
    if(isDebug){Log.e(TAG,"get 返回数据"+new String(outStream.toByteArray()));}
    return new String(outStream.toByteArray());
   }else{ //返回的是HTTP的错误码,不是我们自己定义的错误码!
    
    //处理一下http的错误返回码
        
    Log.e(TAG,"get 网络连接失败"+urlConnection.getResponseCode());
    return "HTTP_ERROR-"+urlConnection.getResponseCode();
   }
  } catch (MalformedURLException e) {
   e.printStackTrace();
   Log.e(TAG,"MalformedURLException e");
  } catch (IOException e) {
   e.printStackTrace();
   Log.e(TAG,"IOException e");
  } finally{  
     
   if(urlConnection!=null){
    urlConnection.disconnect();  //总是需要关闭的吧!
   }
   
  }
  return null;  
 }   
         
 
 /**
  * Http Post 请求
  *
  * @param urlpath
  * @param paramsDatas
  */
 private static String httpConnByPost(RequestUrl ru,Params params) {
  String token = (String) params.getMap().get("token") ;
  String et = (String) params.getMap().get("et") ;
  params.getMap().remove("et");
  if(token != null ){
   params.getMap().put("token", Md5.md5(token + et + params.getMap().get("uid") + ru.getKeywords()));
  }  
  URL url = null;                                                       // 根据地址创建URL对象
  HttpURLConnection urlConnection = null;                               // 根据URL对象打开链接
  try {
   url = new URL(ru.getUrl());                                                          // 根据地址创建URL对象
   urlConnection = (HttpURLConnection) url.openConnection();                            // 根据URL对象打开链接
   
   urlConnection.setRequestMethod("POST");                                               // 设置请求的方式
   urlConnection.setReadTimeout(readTimeout);                                            // 设置请求的超时时间
   urlConnection.setConnectTimeout(connectTimeout);
   
   
   String paramsData = HttpURLConstant.COMMON_PARAMS + et + params.toString();           //通用参数的使用要注意
   Log.w("NETURL",url+"?"+paramsData);
   
   urlConnection.setRequestProperty("Connection", "keep-alive");                         // 设置维持长连接  
   urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); // 设置文件的类型
   urlConnection.setRequestProperty("Content-Length",String.valueOf(paramsData.getBytes().length)); // 设置数据的长度
   urlConnection.setRequestProperty("User-Agent","Devond_Watch,Android-device.");  // ???
   urlConnection.setDoOutput(true);   // 发送POST请求必须设置允许输出
   urlConnection.setDoInput(true);    // 发送POST请求必须设置允许输入,setDoInput的默认值就是true
   urlConnection.setUseCaches(false); // 为安全,不允许使用缓存
      
   urlConnection.connect();           //urlConnection.getInputStream()的时候会自动的打开连接的
   OutputStream os = urlConnection.getOutputStream();    //获取输出流developer
   os.write(paramsData.getBytes());
   os.flush();
   
   if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {                 
    InputStream is = urlConnection.getInputStream();          // 获取响应的输入流对象
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 创建字节输出流对象
    int len = 0;                                              // 定义读取的长度
    byte buffer[] = new byte[2048];                           // 定义缓冲区
    while ((len = is.read(buffer)) != -1) {                   // 按照缓冲区的大小,循环读取
     baos.write(buffer, 0, len);                           // 根据读取的长度写入到os对象中
    }
    is.close();// 释放资源   
    baos.close();
  
    final String result = new String(baos.toByteArray());
    
    if(isDebug){
     Log.e(TAG,"Post返回的数据:"+result);
    } 
    return new String(baos.toByteArray());
    
   }else{ //返回的是HTTP的错误码,不是我们自己定义的错误码!
    //处理一下http的错误返回码
    Log.e(TAG,urlConnection.getResponseCode()+"#Post 网络连接失败#"+urlConnection.getErrorStream());
    return "HTTP_ERROR-"+urlConnection.getResponseCode();
   }
  } catch (MalformedURLException e) {
   e.printStackTrace();
   Log.e(TAG,"MalformedURLException e");
  }catch (Exception e) {
   e.printStackTrace();
  }finally{
   
   if(urlConnection!=null){
    urlConnection.disconnect();
   }
   
  }
  Log.e(TAG,"Post 请求返回为空");
  return null;
 }
时间: 2025-01-10 13:16:02

Android http HttpURLConnection的相关文章

Android使用HttpURLConnection下载图片

讲到http就必需要了解URI和URL URI (uniform resource identifier)统一资源标志符: URL(uniform resource location )统一资源定位符(或统一资源定位器): 可以理解成URL是URI的子集,URI是一抽象的标识符,URL可以理解成具体的标识符:只要是网络上的资源就能找到唯一的URL. 目录结构 效果图 关键代码 HttpUtils.java类 package com.dzt.downloadimage.utils; import

Android HttpClient HttpURLConnection相关介绍

Android HttpClient HttpURLConnection相关介绍 遇到一个问题 在android studio上用HttpClient编写网络访问代码的时候,发现该类无法导入并使用....百度了一会儿之后 发现一个强大网友已经解决了.相关博客:http://stackoverflow.com/questions/32153318/httpclient-wont-import-in-android-studio 究其原因:在Android 2.3及以上版本,使用的是HttpURLC

android之HttpURLConnection(转)

android之HttpURLConnection 1.HttpURLConnection连接URL1)创建一个URL对象 URL url = new URL(http://www.baidu.com); 2)利用HttpURLConnection对象从网络中获取网页数据 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 3)设置连接超时 conn.setConnectTimeout(6*1000); 4)对响应

Android利用HttpURLConnection实现模拟登录

最近在做一个APP,需要模拟登录教务处,之前曾经用HttpClient做过,点这里,但是发现最新的Android SDK已经不支持Httpclient了,所以只好在琢磨一下HttpURLConnection实现了,其中一个问题浪费了不少时间,下面这行代码一旦添加就无法登录: httpURLConnection.setRequestProperty("Content-Type","text/html; charset=GBK"); 贴一下效果,由于是实现模拟登录,就没

Android之HttpURLConnection

1.HttpURLConnection连接URL1)创建一个URL对象 URL url = new URL(); 2)利用HttpURLConnection对象从网络中获取网页数据 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 3)设置连接超时 conn.setConnectTimeout(6*1000); 4)对响应码进行判断 if (conn.getResponseCode() == 200){    /

Android中HttpURLConnection使用详解

认识Http协议 Android中发送http网络请求是很常见的,要有GET请求和POST请求.一个完整的http请求需要经历两个过程:客户端发送请求到服务器,然后服务器将结果返回给客户端,如下图所示: 客户端->服务器 客户端向服务器发送请求主要包含以下信息:请求的Url地址.请求头以及可选的请求体,打开百度首页,客户端向服务器发送的信息如下所示: 请求URL(Request URL) 上图中的Request URL就是请求的Url地址,即https://www.baidu.com,该Url没

Android 使用HttpURLConnection 实现多线程下载

工具类代码: package com.example.xiaocool.multithreadclient; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; public class DownUtil {     // 定义下载资源的路径     private String path;     // 指定所下载

android网络HttpURLConnection抓取网络图片

package com.liang.netpicture; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Message; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.

Android通过HttpURLConnection获取JSON并进行UI更新

本例子中使用的是:HttpURLConnection+Thread+Handler的组合,在 new Thread中通过HttpURLConnection获取JSON数据后并在Handler里对UI界面进行更新. 也可以用过HttpClient ,AsyncTask实现此功能,此处就不说啦. 废话不多少直接上代码了 -------------------------------分割线---------------------------------------- activity_main.xm

android使用HttpURLConnection实现带参数文件上传

文件上传是常见功能,然而android网上大多数的文件上传都使用httpclient,而且需要添加一个httpmine-jar,其实HttpURLConnection也可以实现文件上传,但是它在移动端有个弊端,就是不能上传大文件,所以这次说的方式,只能上传一些较小的文件. 文件上传,并且带上一些参数,这需要我们了解http请求的构造方式,也就是它的格式. HttpURLConnection需要我们自己构造请求头部,也就是我们要拼接出一个正确完整的请求. 下面来看一个典型的例子 POST /api