虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Android编程 > Android平台下使用HttpUrlConnection

Android平台下使用HttpUrlConnection
类别:Android编程   作者:码皇   来源:互联网   点击:

*** HttpURLConnection post方式请求服务器* @param urlpath* @param requestData* @return* @throws IOException* public static String requestByPost(String urlpath,String requestData) th

/**
* HttpURLConnection post方式请求服务器
* @param urlpath
* @param requestData
* @return
* @throws IOException
*/
public static String requestByPost(String urlpath,String requestData) throws IOException{
// HTTP connection reuse which was buggy pre-froyo

        //froyo之前的系统使用httpurlconnection存在bug

/*Workaround for bug pre-Froyo, see here for more info:
               http://android-developers.blogspot.com/2011/09/androids-http-clients.html*/

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) {

            System.setProperty("http.keepAlive", "false");

        }

URL url = new URL(urlpath);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setConnectTimeout(TIMEOUT);
conn.setReadTimeout(TIMEOUT);
conn.setRequestMethod("POST");
conn.setDoOutput(true);
//需要设置 gzip的请求头 才可以获取Content-Encoding响应码
conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
conn.connect();
String urlEncodedRequestStr = URLEncoder.encode(requestData,"utf-8");
String requestStr = "jsonStr="+urlEncodedRequestStr;
conn.getOutputStream().write(requestStr.getBytes("utf-8"));
conn.getOutputStream().flush();
conn.getOutputStream().close();
// //获取所有响应头字段
//    Map< String,List< String>> map = conn.getHeaderFields();
//    //遍历所有的响应头字段
//    if(null!=map){
//      for (String key : map.keySet()){
//      System.out.println(key + "--->" + map.get(key));
//      }
//    }
String content_encode = conn.getContentEncoding();
System.out.println("content_encode:"+content_encode);
// int responseCode = conn.getResponseCode();
// System.out.println("responseCode:"+responseCode);
// if(responseCode != 200){
// String message = conn.getResponseMessage();
// throw new IOException("ResponseCode:"+responseCode+",Message:"+message);
// }

//如果是gzip的压缩流 进行解压缩处理
if(null!=content_encode&&!"".equals(content_encode)&&content_encode.equals("gzip")){
GZIPInputStream in = new GZIPInputStream(conn.getInputStream());
if(in == null){
return "";
}
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
int len ;
byte [] buffer = new byte[1024];
while((len=in.read(buffer))!= -1){
arrayOutputStream.write(buffer, 0, len);
}
in.close();
arrayOutputStream.close();
conn.disconnect();
str = new String(arrayOutputStream.toByteArray(),"utf-8");
//正常流处理
}else{
InputStream in = conn.getInputStream();
if(in == null){
return "";
}
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
int len ;
byte [] buffer = new byte[1024];
while((len=in.read(buffer))!= -1){
arrayOutputStream.write(buffer, 0, len);
}
in.close();
arrayOutputStream.close();
conn.disconnect();
str = new String(arrayOutputStream.toByteArray(),"utf-8");
}
return str;
}

添加的注释是项目中实际遇到的问题,记下来小小总结下!

相关热词搜索: Android 平台 使用