1. import java.io.BufferedInputStream;
2. import java.io.ByteArrayOutputStream;
3. import java.io.DataOutputStream;
4. import java.io.File;
5. import java.io.FileInputStream;
6. import java.io.InputStream;
7. import java.net.URL;
8. import java.net.URLConnection;
9. import java.util.ArrayList;
10. import java.util.Collection;
11. import java.util.HashMap;
12. import java.util.Iterator;
13. import java.util.Map;
14.
15. public class HttpRequestMaker{
16. public HttpRequestMaker( String url ) throws Exception {
17. m_Url = new URL( url );
18. }
19.
20. public final static String boundary = "---------------------------7d71b526e00e4";
21. public final static String prefix = "--";
22. public final static String newLine = "\r\n";
23.
24. public final static String fileContentType = "Content-Type: application/octet-stream\r\n\r\n";
25. public final static String fileContentDisposition = "Content-Disposition: form-data; name=\"%name\"; filename=\"%fileName\"\r\n";
26. public final static String paramContentDisposition = "Content-Disposition: form-data; name=\"%name\"\r\n\r\n";
27.
28. private URL m_Url = null;
29. private URLConnection uc = null;
30. private Map m_fileMap = new HashMap();
31. private Map m_paraMap = new HashMap();
32. long m_FileTotalSize = 0;
33.
34. public void AddFile(String name, String filename){
35. File file = new File( filename );
36. if( file.exists() ){
37. m_FileTotalSize += file.length();
38. m_fileMap.put(name, file);
39. }
40. }
41.
42. public void AddFile(String name, File file){
43. if( file.exists() ){
44. m_FileTotalSize += file.length();
45. m_fileMap.put(name, file);
46. }
47. }
48.
49. public void AddParam( String name, String value){
50. m_FileTotalSize += value.length();
51. m_paraMap.put(name, value);
52. }
53.
54. public void Upload() throws Exception {
55. try{
56. uc = m_Url.openConnection();
57. uc.setDoOutput( true );
58. uc.setRequestProperty( "Accept", "*/*" );
59. uc.setRequestProperty( "Accept-Language", "ja" );
60. uc.setRequestProperty( "Content-Type", "multipart/form-data; boundary=" + boundary);
61. uc.setRequestProperty( "Accept-Encoding", "gzip, deflate" );
62. uc.setRequestProperty( "Connection", "Keep-Alive" );
63. uc.setRequestProperty( "Cache-Control", "no-cache" );
64.
65. DataOutputStream dos = new DataOutputStream( uc.getOutputStream() );
66.
67. for(Iterator iterator = m_fileMap.keySet().iterator(); iterator.hasNext();){
68. String key = (String)iterator.next();
69. File file = (File)m_fileMap.get(key);
70. String fcd = fileContentDisposition.replaceAll("%name", key);
71. fcd = fcd.replaceAll("%fileName", file.getName());
72.
73. dos.writeBytes(prefix + boundary + newLine);
74. dos.writeBytes(fcd);
75. dos.writeBytes(fileContentType);
76.
77. FileInputStream fstram = new FileInputStream(file);
78. byte[] buf = new byte[4000];
79. int len = 0;
80. while (len != -1) {
81. len = fstram.read(buf);
82. if(len>0){
83. dos.write(buf, 0, len);
84. }
85. }
86. dos.writeBytes(newLine);
87. fstram.close();
88. }
89.
90. for(Iterator iterator = m_paraMap.keySet().iterator();iterator.hasNext();){
91. String key = (String)iterator.next();
92. String value = (String)m_paraMap.get(key);
93.
94. String fcd = paramContentDisposition.replaceAll("%name", key);
95. dos.writeBytes(prefix + boundary + newLine);
96. dos.writeBytes(fcd);
97. dos.writeBytes(value);
98. dos.writeBytes(newLine);
99. }
100.
101. dos.writeBytes(prefix + boundary + prefix + newLine);
102.
103. dos.close();
104. }
105. catch(Exception e){
106. e.printStackTrace();
107. throw e;
108. }
109. }
110.
111. public InputStream getInputStream() throws Exception{
112. if(uc==null){
113. return null;
114. }
115. return uc.getInputStream();
116. }
117.
118. public static void main(String[] args) throws Exception {
119.
120. HttpFileUpoad httpRequestMaker= new HttpFileUpoad("http://192.168.1.117:8080/test");
121. httpRequestMaker.AddFile("file0", "c:/work/test0.xml");
122. httpRequestMaker.AddFile("file1", "c:/work/test1.xml");
123. httpRequestMaker.AddParam("p1", "testvalue");
124. httpRequestMaker.Upload();
125. InputStream is = httpRequestMaker.getInputStream(); //
126. BufferedInputStream bis = new BufferedInputStream(is);
127. ByteArrayOutputStream baos = new ByteArrayOutputStream();
128. int i = 0;
129. while((i = bis.read()) != -1){
130. baos.write(i);
131. }
132. System.out.println(baos.toString());
133.
134. bis.close();
135. is.close();
136. }
137.
138. /**
139. *
140. * @param timeout
141. */
142. public void setReadTimeout(int timeout){
143. if(uc == null){
144. return;
145. }
146. uc.setReadTimeout(timeout);
147. }
148. }
分享到:
相关推荐
你可以编写自己的Java类来实现特定的请求逻辑,然后在JMeter中配置这个Java Request sampler来执行你的代码。 对于TCP请求,这是基于传输控制协议的网络通信方式,主要用于提供面向连接的服务。在JMeter中使用Java ...
本篇文章将详细讲解如何在Java中使用Session来模拟用户登录。 首先,我们需要理解Session的工作原理。Session是服务器为每个客户端(浏览器)创建的一个数据存储结构,通常是一个HashMap。当用户登录时,服务器会...
本篇将详细探讨Java处理文件上传的底层实现,以及如何使用Java模拟POST协议来实现文件上传。 首先,我们需要理解文件上传的基本原理。在HTTP协议中,文件上传通常通过POST请求进行。当用户在表单中选择文件并提交时...
### Java方向模拟笔试题知识点解析 #### 基础知识简答题 1. **static变量与实例变量的区别:** - **定义与作用域:** `static` 变量也称为类变量,属于整个类所有,由类的所有实例共享;而实例变量则是每个对象...
使用Java Request Sampler是JMeter进行接口测试的一种高级技术,它允许用户在JMeter中执行Java代码来模拟各种HTTP请求。 首先,我们需要了解Java Request Sampler的基本概念。在JMeter中,Sampler是负责发送请求到...
在本Java项目实践中,我们关注的是构建一个电梯模拟系统,这是一项锻炼编程技能和理解并发控制的优秀实战练习。这个项目不仅展示了Java编程语言的基本应用,还深入到更高级的概念,如多线程和同步机制,这些都是现代...
在这个Java模拟项目中,ARQ机制通过停等请求重传和GO-BACK-N两种协议得以实现。下面将详细阐述这两种ARQ协议及其在Java中的实现。 1. **停等请求重传ARQ(Stop-and-Wait ARQ)**: 停等请求重传是最简单的ARQ协议...
**JMeter入门:Java Request实例** Apache JMeter是一款强大的性能测试工具,主要用于Web应用的压力测试。它是一款开源软件,遵循Apache License 2.0协议,适用于多种操作系统,如Windows、Linux和Mac OS等。JMeter...
在模拟SOAPUI调用Web服务时,开发者通常会使用编程语言的HTTP客户端库,如Java的HttpURLConnection、Python的requests库或者Node.js的axios。这些库允许我们发送POST请求,并设置请求头(包括SOAPAction头)和请求体...
总的来说,Java模拟POST请求涉及到网络通信和HTTP协议的理解,通过Apache HttpClient库可以方便地实现这一功能。在处理API交互时,正确构建请求和解析响应是关键,这有助于确保数据的准确性和系统的稳定性。
Java 模拟发送 Form-Data 的请求方式 Java 模拟发送 Form-Data 的请求方式是指在 Java 语言中模拟浏览器发送 Form-Data 格式的 HTTP 请求的方法。Form-Data 是一种常见的 HTTP 请求体格式,广泛应用于文件上传、...
三、Java模拟磁盘调度 在Java中,我们可以利用面向对象编程的特点,创建磁盘调度算法的类,如DiskScheduler,包含各种调度算法的实现。同时,为了模拟磁盘操作,可以创建DiskDrive类表示磁盘,Track类表示磁道,...
在本文中,我们将深入探讨...总结来说,Java模拟登录人人网涉及了网络请求、HTML解析、Cookie管理等多个技术环节,是Java网络编程的一个重要应用场景。通过不断学习和实践,你可以掌握这项技能并应用于更多类似的任务。
Java模拟ping程序是一种在计算机网络领域常见的应用,它利用了ICMP(Internet Control Message Protocol)协议,用于测试网络连接的可达性和响应时间。这个程序在Java中实现,可以帮助学习者理解网络编程的基本原理,...
Java模拟淘宝登录源码是一种常见的网络爬虫技术,主要用于自动化执行网页登录操作,例如在进行数据分析或自动化测试时。在这个场景中,我们使用了Apache HttpClient库,它是一个强大的HTTP客户端API,可以处理HTTP...
接下来,添加“HTTP Request”采样器来模拟对Java服务的HTTP请求。在采样器中,需要配置目标服务器的URL、请求方法(GET或POST)、路径、参数等。如果Java请求涉及自定义头信息,可以在“HTTP Header Manager”中...
在Java Web开发中,表单上传是常见的功能之一,尤其是当用户需要上传多个文件时。本文将详细讲解如何实现这个功能,主要涉及HTML表单、Servlet、MVC框架(如Spring MVC)以及文件处理的相关知识。 1. HTML表单设置...
在本项目中,"Java 模拟电梯有源码.rar" 是一个包含Java源代码的压缩包,旨在帮助我们理解并实现一个电梯系统的模拟。这个系统涵盖了电梯的基本操作,如上下移动、开门/关门以及处理楼层请求。让我们深入探讨这个...
在"Lift Question.doc"文档中,可能详细阐述了电梯模拟的逻辑结构、类的设计以及具体的实现细节,包括电梯类(Elevator)、楼层类(Floor)和用户请求类(Request)等。电梯类可能包含电梯的当前楼层、目标楼层、...
在这个Java小程序中,我们将深入探讨如何使用编程语言来模拟滑动窗口协议的工作原理。 滑动窗口协议的核心概念是允许发送方在接收到确认之前发送一定数量的数据,这个窗口内的数据可以是未确认但已发送的。窗口大小...