HttpClient封装,get请求和post请求,文件下载和上传


public void sendRequest(RequestMethod method, String target, Map<String, String> params, final HttpTaskListener listener) {
  IKLog.e("===url: " + method + ", " + target);// TODO 测试用打印URL
  IKLog.e("===url params: " + (params==null?"":params.toString()));
  if (TextUtils.isEmpty(target))
   return;
  prepareTarget(target);
  HttpClient client = createHttpClient(target);
  mHttpListener = listener;
  switch (method) {
  case GET:
   if (params != null) {
    IKLog.e("Http GET Request unable to auto assemble any params, please check your url");
   }
   request = new HttpGet(target);
   break;
  case POST:
   request = new HttpPost(target);
   if (params != null && !params.isEmpty()) {
    try {
     List<BasicNameValuePair> pairList = new ArrayList<BasicNameValuePair>();
     Iterator it = params.entrySet().iterator();
     while (it.hasNext()) {
      Map.Entry entry = (Map.Entry) it.next();
      pairList.add(new BasicNameValuePair(entry.getKey().toString(), entry.getValue()==null?"":entry.getValue().toString()));
     }
     ((HttpPost) request).setEntity(new UrlEncodedFormEntity(pairList, CHARSET));
    } catch (final Exception e) {
     e.printStackTrace();
     if (listener != null) {
      mainHandler.post(new Runnable() {
       @Override
       public void run() {
        listener.onHttpFailed(e.getMessage());
       }
      });
     }
     return;
    }
   }
   break;
  default:
   throw new UnsupportedOperationException("method " + method.name());
  }
//  request.setHeader("Accept-Encoding", "deflate");
  setHttpHeaders(request);
  HttpResponse response;
  try {
   response = client.execute(request);
   final int mStatusCode = response.getStatusLine().getStatusCode();
   if (mStatusCode == HttpStatus.SC_OK) {
    HttpEntity oEntity = response.getEntity();
    final String reStr = EntityUtils.toString(oEntity);
    IKLog.d("==HttpHandler.sendRequest: " + reStr); // TODO 测试
    if (listener != null) {
     if (reStr.contains("<!DOCTYPE html PUBLIC ")) {
      mainHandler.post(new Runnable() {
       @Override
       public void run() {
        listener.onHttpFailed("server error, http statuscode maybe 500");
       }
      });
      return;
     }
     mainHandler.post(new Runnable() {
      @Override
      public void run() {
       listener.onHttpSuccess(reStr);
//       IKLog.e(reStr);
      }
     });
    }
   } else {
    IKLog.d("==HttpHandler.sendRequest: mStatusCode=" + mStatusCode); // TODO 测试
    //除200以外的状态码统一归结到此处处理
    if (listener != null) {
     //500在此处特别处理
     if (mStatusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
      mainHandler.post(new Runnable() {
       @Override
       public void run() {
        HttpTaskVIewHelper.getInstance().showMessage("服务器又去开小差了, 请稍后重试");
       }
      });
     }
     mainHandler.post(new Runnable() {
      @Override
      public void run() {
       listener.onHttpFailed(mStatusCode + "");
       IKLog.e(String.valueOf(mStatusCode));
      }
     });
    }
   }
  } catch (final UnknownHostException e) {
   e.printStackTrace();
   mainHandler.post(new Runnable() {
    @Override
    public void run() {
     HttpTaskVIewHelper.getInstance().showMessage("域名解析失败, 请稍后再试");
    }
   });
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onHttpFailed(e.getMessage());
     }
    });
   }
  } catch (final ClientProtocolException e) {
   e.printStackTrace();
   request.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onHttpFailed(e.getMessage());
      IKLog.e(e.getMessage());
     }
    });
   }
  } catch (final IOException e) {
   if (e.getMessage().contains("timed out")) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      HttpTaskVIewHelper.getInstance().showMessage("无法连接到服务器, 请检查您的网络设置");
     }
    });
   }
   e.printStackTrace();
   request.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onHttpFailed(e.getMessage());
      IKLog.e(e.getMessage());
     }
    });
   }
  } catch (final Exception e) {
   e.printStackTrace();
   //出现这个异常则表示有未考虑到的情况
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onHttpFailed(e.getMessage());
      IKLog.e(e.getMessage());
     }
    });
   }
  } finally {
   if (client != null) {
    client.getConnectionManager().shutdown();
   }
  }
 }
 
 public void sendRequest(RequestMethod method, String target, JSONObject params, final HttpTaskListener listener) {
  IKLog.e("===url: " + method + ", " + target);// TODO 测试用打印URL
  IKLog.e("===url params: " + (params==null?"":params.toString()));
  if (TextUtils.isEmpty(target))
   return;
  prepareTarget(target);
  HttpClient client = createHttpClient(target);
  mHttpListener = listener;
  switch (method) {
  case GET:
   if (params != null) {
    IKLog.e("Http GET Request unable to auto assemble any params, please check your url");
   }
   request = new HttpGet(target);
   break;
  case POST:
   request = new HttpPost(target);
   if (params != null) {
    try {
     StringEntity entity = new StringEntity(params.toString(), CHARSET);
     entity.setContentType("application/json");
     ((HttpPost) request).setEntity(entity);
     IKLog.d("HttpHandler.sendRequest. postJson = " + params.toString());
    } catch (final Exception e) {
     e.printStackTrace();
     if (listener != null) {
      mainHandler.post(new Runnable() {
       @Override
       public void run() {
        listener.onHttpFailed(e.getMessage());
       }
      });
     }
     return;
    }
   }
   break;
  default:
   throw new UnsupportedOperationException("method " + method.name());
  }
//  if (mUseGzip) {
//  request.setHeader("Accept-Encoding", "deflate");
//  }
  setHttpHeaders(request);
  HttpResponse response;
  try {
   response = client.execute(request);
   final int mStatusCode = response.getStatusLine().getStatusCode();
   if (mStatusCode == HttpStatus.SC_OK) {
    HttpEntity oEntity = response.getEntity();
    final String reStr = EntityUtils.toString(oEntity, CHARSET);
    IKLog.d("==HttpHandler.sendRequest: " + reStr); // TODO 测试
    if (listener != null) {
     if (reStr.contains("<!DOCTYPE html PUBLIC ")) {
      mainHandler.post(new Runnable() {
       @Override
       public void run() {
        listener.onHttpFailed("server error, http statuscode maybe 500");
       }
      });
      return;
     }
     mainHandler.post(new Runnable() {
      @Override
      public void run() {
       listener.onHttpSuccess(reStr);
      }
     });
    }
   } else {
    IKLog.d("==HttpHandler.sendRequest: mStatusCode=" + mStatusCode); // TODO 测试
    //除200以外的状态码统一归结到此处处理
    if (listener != null) {
     //500在此处特别处理
     if (mStatusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
      mainHandler.post(new Runnable() {
       @Override
       public void run() {
        HttpTaskVIewHelper.getInstance().showMessage("服务器又去开小差了, 请稍后重试");
       }
      });
     }
     mainHandler.post(new Runnable() {
      @Override
      public void run() {
       listener.onHttpFailed(mStatusCode + "");
      }
     });
    }
   }
  } catch (final UnknownHostException e) {
   e.printStackTrace();
   mainHandler.post(new Runnable() {
    @Override
    public void run() {
     HttpTaskVIewHelper.getInstance().showMessage("域名解析失败, 请稍后再试");
    }
   });
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onHttpFailed(e.getMessage());
     }
    });
   }
  } catch (final ClientProtocolException e) {
   e.printStackTrace();
   request.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onHttpFailed(e.getMessage());
     }
    });
   }
  } catch (final IOException e) {
   if (e.getMessage().contains("timed out")) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      HttpTaskVIewHelper.getInstance().showMessage("无法连接到服务器, 请检查您的网络设置");
     }
    });
   }
   e.printStackTrace();
   request.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onHttpFailed(e.getMessage());
     }
    });
   }
  } catch (final Exception e) {
   e.printStackTrace();
   //出现这个异常则表示有未考虑到的情况
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onHttpFailed(e.getMessage());
     }
    });
   }
  } finally {
   if (client != null) {
    client.getConnectionManager().shutdown();
   }
  }
 }
 
 /**
  * 文件上传
  * @param target URL
  * @param fParams Map
  * @param listener HttpTaskListener
  */
 public void uploadFile(String target, final Map<String, File> fParams, final List<NameValuePair> tParams, final UploadFileListener listener) {
  IKLog.e("===url: " + target);// TODO 测试用打印URL
  IKLog.e("===url fParams: " + (fParams==null?"":fParams.toString()));
  IKLog.e("===url tParams: " + (tParams==null?"":tParams.toString()));
  if (TextUtils.isEmpty(target)) {
   if (listener != null) {
    listener.onFailed("target url not be null!");
   }
   return;
  }
  HttpClient client = createHttpClient(target);
  fRequest = new HttpPost(target);
  setHttpHeaders(fRequest);
  MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
  //浏览器兼容模式
  multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
  //multipartEntityBuilder.setCharset(Charset.forName(CHARSET)); //可能会导致服务端接收不到参数
  ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);//post中文表单数据,防止乱码。
  if (tParams != null && tParams.size() > 0) {
   for (NameValuePair p : tParams) {
    multipartEntityBuilder.addPart(p.getName(), new StringBody(p.getValue(), contentType));
//    multipartEntityBuilder.addTextBody(p.getName(), p.getValue()); //如需加上编码格式需加入apache的httpcore,jar
   }
  }
  Set<Entry<String, File>> entries = fParams.entrySet();
  for (Entry<String, File> entry : entries) {
   multipartEntityBuilder.addPart(entry.getKey(), new FileBody(entry.getValue()));
  }
  HttpEntity postEntity = multipartEntityBuilder.build();
  ProgressEntity pEntity = new ProgressEntity(postEntity, listener);
  ((HttpPost) fRequest).setEntity(pEntity);
  HttpResponse response;
  try {
   response = client.execute(fRequest);
   final int mStatusCode = response.getStatusLine().getStatusCode();
   if (mStatusCode == HttpStatus.SC_OK) {
    HttpEntity oEntity = response.getEntity();
    final String reStr = EntityUtils.toString(oEntity, CHARSET);
    if (listener != null) {
     mainHandler.post(new Runnable() {
      @Override
      public void run() {
       listener.onSuccess(reStr);
      }
     });
    }
   } else {
    //除200以外状态码统一在此处理
    if (listener != null) {
     mainHandler.post(new Runnable() {
      @Override
      public void run() {
       listener.onFailed("HTTP StatusCode is " + mStatusCode);
      }
     });
    }
   }
  } catch (final ClientProtocolException e) {
   e.printStackTrace();
   request.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onFailed(e.getMessage());
     }
    });
   }
  } catch (final IOException e) {
   e.printStackTrace();
   request.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onFailed(e.getMessage());
     }
    });
   }
  } catch (final Exception e) {
   //出现这个异常则表示有未考虑到的情况
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onFailed(e.getMessage());
     }
    });
   }
  } finally {
   if (client != null) {
    client.getConnectionManager().shutdown();
   }
  }
 }
 
 /**
  * 文件下载
  * @param target
  * @param fPath
  */
 public void downloadFile(String target, String fPath, final DownLoadListener listener) {
  if (TextUtils.isEmpty(target) || TextUtils.isEmpty(fPath)) {
   throw new NullPointerException("download url or local file path can not be null");
  }
  final HttpGet httpGet = new HttpGet(target);
  HttpClient client = createHttpClient(target);
  setHttpHeaders(httpGet);
  //穿透缓存的http头
  httpGet.setHeader("Accept", "*/*");
  httpGet.setHeader("Cache-Control", "no-cache");
  httpGet.setHeader("Pragma", "no-cache");
  HttpResponse response = null;
  try {
   response = client.execute(httpGet);
  } catch (final ClientProtocolException e) {
   e.printStackTrace();
   httpGet.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onError(e.getMessage());
     }
    });
   }
   return;
  } catch (final IOException e) {
   e.printStackTrace();
   httpGet.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onError(e.getMessage());
     }
    });
   }
   return;
  } catch (final Exception e) {
   //出现这个异常则表示有未考虑到的情况
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onError(e.getMessage());
     }
    });
   }
   return;
  }
  HttpEntity entity = null;
  InputStream is = null;
  FileOutputStream fos = null;
  long downloadedBytes = 0;
  try {
   StatusLine statusLine = response.getStatusLine();
   if (statusLine != null) {
    if (listener != null)
     listener.onServerResponse(response);
    int statusCode = statusLine.getStatusCode();
    if (statusCode >= 200 && statusCode < 300) {
     entity = response.getEntity();
     is = entity.getContent();
     long total = entity.getContentLength();
     if (is != null) {
      File file = new File(fPath);
      if (!file.exists()) {
       file.createNewFile();
      }
      fos = new FileOutputStream(file);
      //缓冲
      byte[] buffer = new byte[4096];
      int read = 0;
      while ((read = is.read(buffer)) > 0) {
       fos.write(buffer, 0, read);
       downloadedBytes += read;
       if (listener != null) {
        listener.onProgress(downloadedBytes, total);
       }
      }
      if (listener != null) {
       mainHandler.post(new Runnable() {
        @Override
        public void run() {
         listener.onSuccess();
        }
       });
      }
     }
    }
   }
  } catch (final IllegalStateException e) {
   e.printStackTrace();
   httpGet.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onError(e.getMessage());
     }
    });
   }
  } catch (final IOException e) {
   e.printStackTrace();
   httpGet.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onError(e.getMessage());
     }
    });
   }
  } catch (final InterruptedException e) {
   e.printStackTrace();
   httpGet.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onError(e.getMessage());
     }
    });
   }
  } catch (final Exception e) {
   //未知的异常
   e.printStackTrace();
   httpGet.abort();
   if (listener != null) {
    mainHandler.post(new Runnable() {
     @Override
     public void run() {
      listener.onError(e.getMessage());
     }
    });
   }
  } finally {
   if (client != null) {
    client.getConnectionManager().shutdown();
   }
   if (is != null) {
    try {
     is.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   if (fos != null) {
    try {
     fos.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   if (entity != null) {
    try {
     entity.consumeContent();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值