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. Java MongoDB : Save image example

    In this tutorial, we show you how to save an image file into MongoDB, via GridFS API. The GridFS API ...

  2. bash101总结

    看了 bash101 ,做的一些总结吧,都是些常见用法,易错 1. 有空格会显示多行 2.contine 书里太细了,有空补起来

  3. 【LOJ】#2059. 「TJOI / HEOI2016」字符串

    题解 我们冷静一下,先画一棵后缀树 然后发现我们要给c和d这一段区间在[a,b]这一段开头的串里找lcp 而lcp呢,就是c点的祖先的到根的一段,假如这个祖先的子树里有[a,b - dis[u] + ...

  4. oracle数据库的安装

    ---create group groupadd oinstallgroupadd dbagroupadd oper ------create user useradd -g oinstall -G ...

  5. 安装部署VMware vSphere 5.5文档 (6-3) 安装配置AD域控制器

    部署VMware vSphere 5.5 实施文档 ########################################################################## ...

  6. Winform 串口通讯之读卡器

    老板给我的第一个硬件就是一个读卡器, 说让我做一下试试,于是从网上查了查就写了出来,相当的简单. 但是后来还有一个地磅的串口通讯,我整整搞了一天. 在窗体类的构造函数中写入 Form.CheckFor ...

  7. 【贪心】【堆】Gym - 101775B - Scapegoat

    题意:有n个事件,每个事件有一个严重程度,m个人(m>=n),你要让m个人去背锅,每个人只能背一个事件的锅,但是一个事件可以由很多人背.让你使得这m个人所承受的严重程度的方差最小化. 考虑一开始 ...

  8. [POI2015]Pieczęć

    [POI2015]Pieczęć 题目大意: 一张\(n\times m(n,m\le1000)\)的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色. 你有一个\(a\times b(a,b\l ...

  9. zoj 3537 区间dp+计算几何

    题意:给定n个点的坐标,先问这些点是否能组成一个凸包,如果是凸包,问用不相交的线来切这个凸包使得凸包只由三角形组成,根据costi, j = |xi + xj| * |yi + yj| % p算切线的 ...

  10. java后台接收json数据,报错com.alibaba.fastjson.JSONObject cannot be cast to xxx

    从前台接收json封装的list数据,在后台接收时一直报错,com.alibaba.fastjson.JSONObject cannot be cast to xxx, 使用这种方式接收可以接收 @R ...