先看下一开始使用的网络框架核心代码:
private Message doPost(final String url, final Map<String, String> params, final Map<String, InputStream> inputStreams,final InterCallback callback) {
long startTime = System.currentTimeMillis();
Message message=new Message();
String BOUNDARY = java.util.UUID.randomUUID().toString();
String PREFIX = "--", LINEND = "\r\n";
String CHARSET = XHConf.in().net_encode;
HttpURLConnection conn=null;
try {
// if(url.indexOf("Upload/imgs")>-1) Thread.sleep(130*1000);
URL uri = new URL(url);
conn = (HttpURLConnection) uri.openConnection();
conn.setDoInput(true);// 允许输入
conn.setDoOutput(true);// 允许输出
conn.setUseCaches(false);
conn.setRequestMethod("POST"); // Post方式
conn.setConnectTimeout(XHConf.in().net_timeout*2);
conn.setReadTimeout(XHConf.in().net_timeout * 10);
//设置header
Map<String,String> header = callback.getReqHeader(new HashMap<String, String>(),url,params);
UtilLog.print(XHConf.in().log_tag_net,"d","------------------REQ_POST------------------\n"+url+"\n"+params+";"+inputStreams+"\nheader:"+header.toString());
for (Map.Entry<String, String> map : header.entrySet()) {
conn.setRequestProperty(map.getKey(), map.getValue());
}
// 首先组拼文本类型的参数
StringBuilder sb = new StringBuilder();
if(inputStreams.isEmpty()){
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append(entry.getKey() + "=" + URLEncoder.encode(entry.getValue(),XHConf.in().net_encode) + "&");
}
if(sb.length() > 1)
sb.deleteCharAt(sb.length()-1);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
}else{
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);
sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
sb.append(LINEND);
sb.append(entry.getValue());
sb.append(LINEND);
}
conn.setRequestProperty("Content-Type", "multipart/form-data" + ";boundary=" + BOUNDARY);
}
DataOutputStre