HttpUrlConnection 发送POST请求数据

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值