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;
}
}