package com.mlt.internet.uitls;
import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.Map;import java.util.Map.Entry;
import android.util.Log;/** * * @author maolintao * 功能:该工具类目前只实现了POST,发送请求数据到服务器,并得返回响应
* 原理:根据http协议,构造请求,发送请求,并得到响应 */public class HttpRequest { private static final String TAG="HttpRequest"; /** * @param actionurl 请求的url * @param params 表单文本字段参数 * @param files 文件 * @return 返回的响应内容 */ public static String doRequest(String actionurl, Map<String, String> params, File[] files) { HttpURLConnection urlcon; try { URL url = new URL(actionurl); urlcon = (HttpURLConnection)url.openConnection(); urlcon.setConnectTimeout(8*1000); urlcon.setDoInput(true); urlcon.setDoOutput(true); urlcon.setUseCaches(false); urlcon.setRequestMethod("POST"); urlcon.setRequestProperty("Connection", "Keep-Alive"); urlcon.setRequestProperty("Charset", "UTF-8"); urlcon.setRequestProperty("Content-Type", "multipart/form-data; boundary=----------7db1773f053a"); //得到输出流 DataOutputStream outstream = new DataOutputStream(urlcon.getOutputStream()); //构造请求参数 if(params != null) { StringBuilder sb = new StringBuilder(); for (Entry<String, String> param : params.entrySet()) { sb.append("------------7db1773f053a").append("/r/n"); sb.append("Content-Disposition: form-data; name=/""+param.getKey()+"/"/r/n/r/n"); sb.append(param.getValue()).append("/r/n"); } Log.i(TAG, sb.toString()); outstream.write(sb.toString().getBytes()); //发送请求参数 }// //构造发送文件头 for (File file : files) { StringBuilder filespliter = new StringBuilder(); filespliter.append("------------7db1773f053a").append("/r/n"); filespliter.append("Content-Disposition: form-data; name=/"file/"; filename=/""+file.getName()+"/"").append("/r/n"); //待修订Content-Type应根据文件类型分析得到 filespliter.append("Content-Type: application/msword").append("/r/n/r/n"); Log.i(TAG, filespliter.toString()); outstream.write(filespliter.toString().getBytes()); //发送文件头 //发送文件数据 FileInputStream fin = new FileInputStream(file); byte[] buffer = new byte[1024]; int count; while ((count = fin.read(buffer)) != -1) { outstream.write(buffer, 0, count); } fin.close(); outstream.write("/r/n".getBytes()); } //发送结束标志 outstream.write(("------------7db1773f053a--/r/n").getBytes()); outstream.flush(); //响应信息处理 int cah = urlcon.getResponseCode(); if(cah!= 200) throw new RuntimeException("请求url失败"); InputStream ins = urlcon.getInputStream(); int ch; StringBuilder b = new StringBuilder(); while( (ch = ins.read())!=-1){ b.append((char)ch); } Log.i(TAG, b.toString()); outstream.close(); urlcon.disconnect(); return b.toString(); } catch (Exception e) { Log.i(TAG, "openConnection failed!!"); } return null; }
}