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. SQLSERVER中的非工作时间不得插入数据的触发器的实现

    create trigger trigger_nameon table_namefor insert,update,deleteasif (datepart(yy,getdate())%4=0 or ...

  2. 第一次ActiveX Fuzzing测试

    接着上一篇的看雪Exploit me试题. 这道题给出了一个ActiveX的DLL,挖掘这个DLL中的漏洞. 由于从来没有接触过ActiveX的Fuzzing,所以找了一些文章来看.自己动手试验了一下 ...

  3. Metronic4.7.5 下载 HTML5 UI后台管理框架

    Metronic 是一套精美的响应式后台管理模板,基于强大的 Twitter Bootstrap 3.3.4 框架实现.Metronic 拥有简洁优雅的 Metro UI 风格界面,6 种颜色可选,7 ...

  4. python日期格式转换小记

    utc格林时间==>东八区北京时间 原始日期格式: utctime = ‘2016-07-26 10:08:29’ localtime = (datetime.datetime.fromtime ...

  5. ASP.NET Web API 2:创建API帮助页面

         当你新建了一个web API服务之后,再建一个API帮助页面是很有好处的,这样其他开发人员就会很清楚地知道如何调用你的API接口.你可以选择自己手工建立,但是如果能自动生成岂不是更好.为了简 ...

  6. HTML5 Canvas游戏开发(三)lufylegend开源库件(上)

    lufylegend可以解决HTML5开发游戏中会遇到的一些问题: 1.各种浏览器对于JavaScript和HTML的解析是不一致的. 2.手机浏览器和PC浏览器的区别. 3.JavaScript并非 ...

  7. thinkphp结合ajax实现统计页面pv的浏览量

    统计pv量很常用,下面的代码用ajax实现的,使用ajax可以避免页面缓存造成的影响,只要客户端的js代码执行了就可以统计流量. 一共就两部 将下面代码放在要统计的html页面中,测试时把地址换成自己 ...

  8. PHP isset和empty 详细比较

    找了几篇博文,这应该是说的最清楚的.链接如下:http://blog.chinaunix.net/uid-25311424-id-3966622.html

  9. Java设计模式 - 持续更新

    注意,此博客来源于我的 OneNote 笔记本 因此属于图片形式进行展示,这意味着你可以: 不经过我的同意进行保存 不经过我的同意进行发布 我仍然希望搬运时留一个网址指明来处:我的博客园 多谢!以下是 ...

  10. GPS数据包格式及数据包解析

    GPS数据包解析 GPS数据包解析 目的 GPS数据类型及格式 数据格式 数据解释 解析代码 结构体定义 GPRMC解析函数 GPGGA解析函数 测试样例输出 gps数据包格式 gps数据解析 车联网 ...