用Java模拟multipart形式的Http Post请求
本例通过java模拟了Http的request请求,请求格式为multipart,实现了向服务器同时传递json数据和图片数据。
1 import java.io.ByteArrayOutputStream; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.OutputStream; 8 import java.net.HttpURLConnection; 9 import java.net.MalformedURLException; 10 import java.net.URL; 11 12 public class HttpMultipartTest { 13 static String boundary = "abcde12345"; 14 static String prefix = "--"; 15 static String newLine = "\r\n"; 16 17 public static void main(final String args[]) { 18 test(); 19 } 20 21 private static void test() { 22 try { 23 URL url = new URL("http://127.0.0.1:8080/httpMultipartTestServer/App/testMultipart"); 24 HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 25 connection.setDoInput(true); 26 connection.setDoOutput(true); 27 connection.setRequestProperty("Content-type", "multipart/form-data;boundary=" + boundary); 28 ConfigHttpMultipart(connection.getOutputStream()); 29 InputStream ins = connection.getInputStream(); 30 byte[] b = readBuffer(ins); 31 System.out.println(new String(b)); 32 } catch (MalformedURLException e) { 33 System.out.println(" url error! "); 34 } catch (IOException e) { 35 System.out.println(" io error! "); 36 } 37 } 38 39 private static void ConfigHttpMultipart(final OutputStream out) { 40 StringBuffer params = new StringBuffer(); 41 params.append(prefix + boundary + newLine); 42 params.append("Content-Disposition: form-data; name=\"jsonData\""); 43 params.append(newLine + newLine); 44 String jsonData = "{\"test\":\"test message!\"}"; 45 params.append(jsonData); 46 params.append(newLine); 47 params.append(prefix + boundary + newLine); 48 params.append("Content-Disposition: form-data; name=\"signature\"; filename=\"test.jpg\""); 49 params.append(newLine); 50 params.append("Content-Type: image/pjpeg"); 51 params.append(newLine + newLine); 52 File file = new File("C://test.jpg"); 53 try { 54 InputStream in = new FileInputStream(file); 55 out.write(params.toString().getBytes()); 56 out.write(readBuffer(in)); 57 out.write(newLine.getBytes()); 58 out.write((prefix + boundary + prefix + newLine).getBytes()); 59 out.flush(); 60 out.close(); 61 } catch (FileNotFoundException e) { 62 System.out.println(" no file! "); 63 } catch (IOException e) { 64 System.out.println(" io error! "); 65 } 66 } 67 68 public static byte[] readBuffer(final InputStream ins) throws IOException { 69 byte b[] = new byte[1024]; 70 ByteArrayOutputStream stream = new ByteArrayOutputStream(); 71 int len = 0; 72 while ((len = ins.read(b)) != -1) { 73 stream.write(b, 0, len); 74 } 75 return stream.toByteArray(); 76 } 77 }
转载于:https://www.cnblogs.com/kouen/archive/2013/06/13/3134347.html
用Java模拟multipart形式的Http Post请求相关推荐
- Java模拟HTTP的Get和Post请求(增强)
Java模拟HTTP的Get和Post请求(增强) 在之前,写了篇Java模拟HTTP的Get和Post请求的文章,这篇文章起源与和一个朋友砍飞信诈骗网站的问题,于是动用了Apache的comment ...
- java 模拟时钟_java模拟时钟
本次课程设计采用时间片轮转调度算法来实现模拟进程调度任务的执行过 程. 用 Java 模拟进程调度过程,可以方便地将运行结果直观地表示出来.Java 语言 独有的多...... 本次课程设计采用时间片 ...
- java端模拟http的get、post请求(转)
Servlet是SUN指定的Java服务器端编程规范,用以处理来自客户端的请求,处理并做出响应的一套基础API.Servlet是运行在Servlet容器中的Java小程序,容器运行在服务器端,服务器侦 ...
- java模拟单链表环形链表解决约瑟夫问题
java模拟环形链表解决约瑟夫问题 此文是观看尚硅谷韩老师的数据结构与算法学习视频整理的笔记 约瑟夫问题描述 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算 ...
- java 在主方法中定义两个变量 调用方法进行加10_计算机考试二级考试Java模拟试题附答案...
全国计算机等级考试二级考试,需要考生在考前做好足够的复习准备,下面小编为大家带来计算机考试二级考试Java模拟试题,供各位考生练习! 计算机考试二级考试Java模拟试题一 1.类Test1定义如下:p ...
- Jsoup实现java模拟登陆
Jsoup实现java模拟登陆 1:如何获取cookies. 1.1:由于需要登录,故先模拟登陆时的那一个<form>,这里用map来装载变量名称,变量值. Map<String, ...
- 数据模拟:利用Java模拟数据(姓名,邮箱,地址,电话等信息,时间,工资,1-10随机数)并存入mysql
学大数据分析的同学们在做数据分析时一般很难找到适合数据集,本文就来分享一下如何利用Java模拟数据,并将产生数据保存至mysql数据库中. 主要技术就是Java产生数据,利用mybatis存入mysq ...
- 二级考试java模拟考试_计算机考试二级考试Java模拟试题附答案
全国计算机等级考试二级考试,需要考生在考前做好足够的复习准备,下面小编为大家带来计算机考试二级考试Java模拟试题,供各位考生练习! 计算机考试二级考试Java模拟试题 1.类Test1定义如下:pu ...
- java 模拟多线程并发_Java中模拟同时并发请求
有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...
最新文章
- 刻意练习:LeetCode实战 -- Task24. 恢复二叉搜索树
- crosstab交叉表_透视图和交叉表
- 资讯丨NVIDIA自造AI超级计算机:轻松进入世界前五
- 跨平台开发Flutter初体验
- Use After Free Tutorial
- [Android] for ArcFace Demo
- 如何利用OpenSSL生成证书
- UI5 setModel 的核心逻辑
- python的for语句写新的字符串_python写for循环python字符串排序方法
- 数据库:MySQL常见的设计规范误区
- [css] CSS content属性特殊字符有哪些?
- MySQL数据库操作指令
- 实验四 用信号量解决进程互斥与同步问题 生产者与消费者问题模拟
- Windbg是一款非常好用的经典windows系统蓝屏分析修复工具
- R语言学习笔记之数据清洗与整理(三)
- (cf)Codeforces Round #807 (Div. 2)A--C思维题
- [组合数学] NC13611树 (逆元的计算)
- d954(D9546)
- 计算机毕业设计选题建议
- scrapy爬虫之爬取百度手机助手app信息并保存至mongodb数据库(附源码)
热门文章
- python编程有哪些-学习python编程,有哪些不错的软件?
- python基础知识整理-python入门基础知识点整理-20171214
- python开发微信小程序-Python 开发者的微信小程序开发实践
- python散点图点的大小-Python散点图。 标记的大小和样式
- python画笑脸-用Python画滑稽
- python文件输出-python将控制台输出保存至文件的方法
- python装饰器实例-python装饰器实例大详解
- 在电脑上安装python的步骤-python中pygame安装过程(超级详细)
- python贴吧回帖-python控制浏览器爬取百度贴吧回复并写入Excel
- 大学python用什么教材-python大学里用哪本教材比较好?