HttpUrlConnection 发送POST请求数据

    技术2022-05-20  46

    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)