Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件:

  1. public static String post(String actionUrl, Map<String, String> headParams,
  2. Map<String, String> params,
  3. Map<String, File> files) throws IOException {
  4. String BOUNDARY = java.util.UUID.randomUUID().toString();
  5. String PREFIX = "--", LINEND = "\r\n";
  6. String MULTIPART_FROM_DATA = "multipart/form-data";
  7. String CHARSET = "UTF-8";
  8. URL uri = new URL(actionUrl);
  9. HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
  10. conn.setReadTimeout(30 * 1000); // 缓存的最长时间
  11. conn.setDoInput(true);// 允许输入
  12. conn.setDoOutput(true);// 允许输出
  13. conn.setUseCaches(false); // 不允许使用缓存
  14. conn.setRequestMethod("POST");
  15. conn.setRequestProperty("connection", "keep-alive");
  16. conn.setRequestProperty("Charsert", "UTF-8");
  17. conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
  18. + ";boundary=" + BOUNDARY);
  19. if(headParams!=null){
  20. for(String key : headParams.keySet()){
  21. conn.setRequestProperty(key, headParams.get(key));
  22. }
  23. }
  24. StringBuilder sb = new StringBuilder();
  25. if (params!=null) {
  26. // 首先组拼文本类型的参数
  27. for (Map.Entry<String, String> entry : params.entrySet()) {
  28. sb.append(PREFIX);
  29. sb.append(BOUNDARY);
  30. sb.append(LINEND);
  31. sb.append("Content-Disposition: form-data; name=\""
  32. + entry.getKey() + "\"" + LINEND);
  33. sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
  34. sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
  35. sb.append(LINEND);
  36. sb.append(entry.getValue());
  37. sb.append(LINEND);
  38. }
  39. }
  40. DataOutputStream outStream = new DataOutputStream(
  41. conn.getOutputStream());
  42. if (!TextUtils.isEmpty(sb.toString())) {
  43. outStream.write(sb.toString().getBytes());
  44. }
  45. // 发送文件数据
  46. if (files != null)
  47. for (Map.Entry<String, File> file : files.entrySet()) {
  48. StringBuilder sb1 = new StringBuilder();
  49. sb1.append(PREFIX);
  50. sb1.append(BOUNDARY);
  51. sb1.append(LINEND);
  52. sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""
  53. + file.getKey() + "\"" + LINEND);
  54. sb1.append("Content-Type: application/octet-stream; charset="
  55. + CHARSET + LINEND);
  56. sb1.append(LINEND);
  57. outStream.write(sb1.toString().getBytes());
  58. InputStream is = new FileInputStream(file.getValue());
  59. byte[] buffer = new byte[1024];
  60. int len = 0;
  61. while ((len = is.read(buffer)) != -1) {
  62. outStream.write(buffer, 0, len);
  63. Log.i("HttpUtil", "写入中...");
  64. }
  65. is.close();
  66. outStream.write(LINEND.getBytes());
  67. }
  68. // 请求结束标志
  69. byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
  70. outStream.write(end_data);
  71. outStream.flush();
  72. Log.i("HttpUtil", "conn.getContentLength():"+conn.getContentLength());
  73. // 得到响应码
  74. int res = conn.getResponseCode();
  75. InputStream in = conn.getInputStream();
  76. if (res == 200) {
  77. BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
  78. StringBuffer buffer = new StringBuffer();
  79. String line = "";
  80. while ((line = bufferedReader.readLine()) != null){
  81. buffer.append(line);
  82. }
  83. //          int ch;
  84. //          StringBuilder sb2 = new StringBuilder();
  85. //          while ((ch = in.read()) != -1) {
  86. //              sb2.append((char) ch);
  87. //          }
  88. return buffer.toString();
  89. }
  90. outStream.close();
  91. conn.disconnect();
  92. return in.toString();
  93. }

Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件:的更多相关文章

  1. 基于element ui 实现七牛云自定义key上传文件,并监听更新上传进度

    借助上传Upload 上传组件的 http-request 覆盖默认的上传行为,可以自定义上传的实现 <el-upload multiple ref="sliderUpload&quo ...

  2. OkHttp上传文件,服务器端请求解析找不到文件信息的问题

    长话短说,不深入解释了,官方给的上传案例代码: private static final String IMGUR_CLIENT_ID = "..."; private stati ...

  3. Java模拟http上传文件请求(HttpURLConnection,HttpClient4.4,RestTemplate)

    先上代码: public void uploadToUrl(String fileId, String fileSetId, String formUrl) throws Throwable { St ...

  4. php使用curl 实现GET和POST请求(抓取网页,上传文件),支持跨项目和跨服务器

    一:curl 函数和参数详解 函数库:1:curl_init 初始化一个curl会话2:curl_close 关闭一个curl会话3:curl_setopt 为一个curl设置会话参数4:curl_e ...

  5. java http工具类和HttpUrlConnection上传文件分析

    利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java ...

  6. JAVA模拟HTTP post请求上传文件

    在开发中,我们使用的比较多的HTTP请求方式基本上就是GET.POST.其中GET用于从服务器获取数据,POST主要用于向服务器提交一些表单数据,例如文件上传等.而我们在使用HTTP请求时中遇到的比较 ...

  7. swagger上传文件并支持jwt认证

    背景 由于swagger不仅提供了自动实现接口文档的说明而且支持页面调试,告别postman等工具,无需开发人员手动写api文档,缩减开发成本得到大家广泛认可 但是由于swagger没有提供上传文件的 ...

  8. android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件

    AsyncHttpClient开源框架android-async-http还是非常方便的. AsyncHttpClient该类通经常使用在android应用程序中创建异步GET, POST, PUT和 ...

  9. django系列6--Ajax05 请求头ContentType, 使用Ajax上传文件

    一.请求头ContentType ContentType指的是请求体的编码类型,常见的类型共有三种: 1.application/x-www-form-urlencoded 这应该是最常见的 POST ...

随机推荐

  1. Chrome+XX_Net的上网渠道

    本页面将详细演示如何在一台全新的Windows7电脑上架设起Chrome+XX_Net的上网渠道. 本文包含以下部分: 下载和安装Chrome浏览器 获取和运行XX-Net 设置代理 手动导入证书(备 ...

  2. 关于jedis2.4以上版本的连接池配置,及工具类

    jedis.propertise 注意以前版本的maxAcitve和maxWait有所改变,JVM根据系统环境变量ServerType中的值 取不同的配置,实现多环境(测试环境.生产环境)集成. re ...

  3. day6 hashlib模块

        hashlib模块 用于加密相关的文件操作,3.X离代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法 __always_sup ...

  4. 004 关于Java如何扫描指定package下所有的类

    q前言: 在工作中看到这个知识点,就顺便参考了百度的一些资料,整理一下,希望以后用的到. 一:理论部分 1.使用场景 写一个MVC框架,需要从包中扫描出组件并注册到容器中,而JDK没有提供现成的从方法 ...

  5. Eclipse中syso 快捷键 Alt + / 不能使用的问题

    通过使用windows-preferences-java-editor-templates中的快捷键,可以显著提升输入速度.快捷键的设置一般是在这里以及general下面的keys里面设置. 但是,在 ...

  6. 基于 Laravel 开发博客应用系列 —— 项目必备软件安装

    1.概述 通过本项目我们将会构建一个简单.清爽.优雅的博客系统,以及维护管理该博客的后台. 本项目源码公开在GitHub上:https://github.com/ChuckHeintzelman/l5 ...

  7. tomcat+serlet+eclipse环境按键

    ---恢复内容开始--- 1. tomcat环境搭建 安装向导:http://www.runoob.com/jsp/eclipse-jsp.html 1. tomcat启动一闪而过,需要配置 JAVA ...

  8. 使用easypoi导出excel

    EasyPOI是在jeecg的poi模块基础上,继续开发独立出来的,可以说是2.0版本,EasyPoi封装的目的和jeecg一致,争取让大家write less do more ,在这个思路上easy ...

  9. JPA实体类中的注解

    @Entity 标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类@Table 标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相 ...

  10. JAVAEE——SSH项目实战05:用户注册、登陆校验拦截器、员工拜访客户功能和MD5加密

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7170519.html 一.用户注册   显示错误信息到页面上的另一种方法: public ...