`
shameant
  • 浏览: 58727 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

模拟提交

 
阅读更多

 

Java 模拟html表单(form)提交数据 包含多文件 上传 表单提交 for j2me j2se android

我们先来看一下用html写简单的表单(form)是什么样的,如下:

 

  1. <html>  
  2.     <head>  
  3.         <title>上传文件测试页面</title>  
  4.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>  
  5.     </head>  
  6.     <body>  
  7.     <form method="post" action="http://your_address" enctype="multipart/form-data">  
  8.         <input type='hidden' id="do" name="do" value="justDoIt"/>       
  9.         <fieldset>  
  10.             <label>          名称:</label><input type='text' id='myname' name='myname' size='35' maxlength='255'><br/>  
  11.             <label>上传文件:</label><input type='file' id='uploadFile' name="uploadFile" size='35' maxlength='255'><br/>  
  12.             <label>描述:</label><br/>  
  13.             <textarea rows="5" cols="100" id='description' name='description' >  
  14. </fieldset>  
  15.         <fieldset>  
  16.             <input type='submit' id='submit'/>  
  17.             <input type='reset' id='reset'/>  
  18.         </fieldset>                 
  19.     </form>  
  20.     </body>  
  21. </html>  

 

假设服务器都做好的情况下,我们点击"提交",就能完成文件上传工做。

 

需求:

用java 模拟html表单(form)提交数据 包含多文件 上传 表单提交。

不用多说,码农的风格直接上代码,说明全在代码上了,用法参见main方法s

 

  1. import java.io.ByteArrayOutputStream;  
  2. import java.io.DataInputStream;  
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FileOutputStream;  
  7. import java.io.InputStream;  
  8. import java.io.OutputStream;  
  9. import java.util.ArrayList;  
  10. import java.util.Enumeration;  
  11. import java.util.Hashtable;  
  12. import java.util.List;  
  13.   
  14. import java.net.HttpURLConnection;  
  15. import java.net.URL;  
  16.   
  17. /** 
  18.  * 模拟html表单提交数据,喜欢研究的同学可以把代码优化一下。 
  19.  */  
  20. public class HttpMultipartRequest {  
  21.     //每个post参数之间的分隔  
  22.     static final String BOUNDARY = "----------V2ymHFg03ehbqgZCaKO6jy";  
  23.   
  24.     public static void main(String[] args) {  
  25.           
  26.         List<String[]> stringParams = new ArrayList<String[]>();  
  27.         stringParams.add(new String[]{"do""justDoIt"});  
  28.         stringParams.add(new String[]{"myname""aa我是一个测试cc123"});  
  29.         stringParams.add(new String[]{"description""bb我是码农我是一个测试我是一个测试cc567"});  
  30.           
  31.         List<String[]> fileParams = new ArrayList<String[]>();  
  32.         fileParams.add(new String[]{"uploadFile""我是码农的一个测试.zip""application/zip""D://我是一个测试.zip"});  
  33.         HttpMultipartRequest req = new HttpMultipartRequest("http://your_address", stringParams, fileParams);  
  34.         try {  
  35.             byte[] response = req.sendPost();  
  36.             System.out.println(new String(response));  
  37.         } catch (Exception e) {  
  38.             e.printStackTrace();  
  39.         }  
  40.   
  41.     }  
  42.   
  43.     // 连接的地址  
  44.     private String urlStr;  
  45.     // 文字post项集 strParams 1:key 2:value  
  46.     private List<String[]> strParams;  
  47.     // 文件的post项集 fileParams 1:fileField, 2.fileName, 3.fileType, 4.filePath  
  48.     private List<String[]> fileParams;  
  49.   
  50.     /** 
  51.      * 建立一个request连接 
  52.      * @param urlStr 
  53.      * @param strParams 1:key 2:value 
  54.      * @param fileParams 1:fileField, 2.fileName, 3.fileType, 4.filePath 
  55.      */  
  56.     public HttpMultipartRequest(String urlStr, List<String[]> strParams, List<String[]> fileParams) {  
  57.         this.urlStr = urlStr;  
  58.         this.strParams = strParams;  
  59.         this.fileParams = fileParams;  
  60.   
  61.     }  
  62.   
  63.     /** 
  64.      * 向服务器发送post请求 
  65.      * @return byte[] 
  66.      * @throws Exception 
  67.      */  
  68.     public byte[] sendPost() throws Exception {  
  69.         //http连接器  
  70.         HttpURLConnection hc = null;  
  71.         //byte输出流,用来读取服务器返回的信息  
  72.         ByteArrayOutputStream bos = null;  
  73.         //输入流,用来读取服务器返回的信息  
  74.         InputStream is = null;  
  75.         //保存服务器返回的信息的byte数组  
  76.         byte[] res = null;  
  77.   
  78.         try {  
  79.             URL url = new URL(urlStr);  
  80.             hc = (HttpURLConnection) url.openConnection();  
  81.   
  82.             hc.setRequestProperty("Content-Type""multipart/form-data; boundary=" + BOUNDARY);  
  83.             hc.setRequestProperty("Charsert""UTF-8");  
  84.             // 发送POST请求必须设置如下两行  
  85.             hc.setDoOutput(true);  
  86.             hc.setDoInput(true);  
  87.             hc.setUseCaches(false);  
  88.             hc.setRequestMethod("POST");  
  89.   
  90.             OutputStream dout = hc.getOutputStream();  
  91.             ////1.先写文字形式的post流  
  92.             //头  
  93.             String boundary = BOUNDARY;  
  94.             //中  
  95.             StringBuffer resSB = new StringBuffer("/r/n");  
  96.             //尾  
  97.             String endBoundary = "/r/n--" + boundary + "--/r/n";  
  98.             //strParams 1:key 2:value  
  99.             if(strParams != null){  
  100.                 for(String[] parsm : strParams){  
  101.                     String key = parsm[0];  
  102.                     String value = parsm[1];  
  103.                     resSB.append("Content-Disposition: form-data; name=/"").append(key).append("/"/r/n").append("/r/n").append(  
  104.                             value).append("/r/n").append("--").append(boundary).append("/r/n");  
  105.                 }  
  106.             }  
  107.             String boundaryMessage = resSB.toString();  
  108.               
  109.             //写出流  
  110.             dout.write( ("--"+boundary+boundaryMessage).getBytes("utf-8") );  
  111.               
  112.             //2.再写文件开式的post流  
  113.             //fileParams 1:fileField, 2.fileName, 3.fileType, 4.filePath  
  114.             resSB = new StringBuffer();  
  115.             if(fileParams != null){  
  116.                 for(int i=0, num=fileParams.size(); i<num; i++){  
  117.                     String[] parsm = fileParams.get(i);  
  118.                     String fileField = parsm[0];  
  119.                     String fileName = parsm[1];  
  120.                     String fileType = parsm[2];  
  121.                     String filePath = parsm[3];  
  122.                       
  123.                     resSB.append("Content-Disposition: form-data; name=/"").append(fileField).append("/"; filename=/"").append(  
  124.                             fileName).append("/"/r/n").append("Content-Type: ").append(fileType).append("/r/n/r/n");  
  125.                       
  126.                     dout.write( resSB.toString().getBytes("utf-8") );  
  127.                       
  128.                     //开始写文件  
  129.                     File file = new File(filePath);  
  130.                     DataInputStream in = new DataInputStream(new FileInputStream(file));  
  131.                     int bytes = 0;  
  132.                     byte[] bufferOut = new byte[1024 * 5];  
  133.                     while ((bytes = in.read(bufferOut)) != -1) {  
  134.                         dout.write(bufferOut, 0, bytes);  
  135.                     }  
  136.                       
  137.                     if(i<num-1){  
  138.                         dout.write( endBoundary.getBytes("utf-8") );  
  139.                     }  
  140.                       
  141.                     in.close();  
  142.                 }  
  143.                   
  144.             }  
  145.               
  146.             //3.最后写结尾  
  147.             dout.write( endBoundary.getBytes("utf-8") );  
  148.               
  149.             dout.close();  
  150.               
  151.             int ch;  
  152.   
  153.             is = hc.getInputStream();  
  154.               
  155.             bos = new ByteArrayOutputStream();  
  156.             while ((ch = is.read()) != -1) {  
  157.                 bos.write(ch);  
  158.             }  
  159.             res = bos.toByteArray();  
  160.         } catch (Exception e) {  
  161.             e.printStackTrace();  
  162.         } finally {  
  163.             try {  
  164.                 if (bos != null)  
  165.                     bos.close();  
  166.   
  167.                 if (is != null)  
  168.                     is.close();  
  169.   
  170.             } catch (Exception e2) {  
  171.                 e2.printStackTrace();  
  172.             }  
  173.         }  
  174.         return res;  
  175.     }  
  176.   
  177.   
  178. }  

 

分享到:
评论

相关推荐

    c#以POST方式模拟提交表单 - 真功夫

    ### C#以POST方式模拟提交表单 - 关键知识点解析 #### 一、知识点概览 本文档将基于“c#以POST方式模拟提交表单”这一主题进行深入解析,主要内容涉及C#语言如何实现HTTP POST请求来模拟提交表单数据,并通过具体的...

    HTTP POST和Get模拟提交工具

    模拟提交工具,如题目中提到的,允许开发者或测试人员在没有实际浏览器环境的情况下,模拟浏览器进行GET或POST请求。这类工具可以帮助开发者调试API,验证服务器端的响应,或进行自动化测试。例如,`AutoRestUtil....

    HTTPS模拟提交 demo

    HTTPS模拟提交 demo,关于 https技术demo,有用的模拟技术

    post模拟提交获取提交后的HTML代码

    在IT行业中,模拟提交是一种常见的自动化测试和网页交互技术,主要应用于登录系统、数据抓取、API测试等领域。本文将详细讲解如何通过编程方式实现模拟提交以获取提交后的HTML代码,以及相关技术的运用。 首先,...

    post模拟提交图片

    在IT行业中,网络通信是不可或缺的一部分,而POST模拟提交数据是一项常见的任务,特别是在进行API测试、自动化脚本编写或者客户端与服务器交互时。本话题主要关注如何通过编程方式以字节流的形式模拟提交图片,并将...

    c#模拟提交数据源码

    模拟数据提交的范例 熟悉模拟提交的代码,也可以当测试Post使用!

    HttpUrlConnectionUtil---模拟提交表单工具类

    使用HttpUrlConnection实现模拟提交表单的一个简单工具类,支持文件和普通参数

    post模拟提交文件中文乱码的问题处理.rar

    5. **批处理文件处理**:提供的资源中包含了批处理文件(post模拟提交文件中文乱码的问题处理.bat),这可能是一个解决此问题的示例脚本。批处理文件可以用来自动化上述的一些步骤,比如预先处理文件名和数据编码。 ...

    PHP版SOCKET模拟提交POST消息(源码)

    本文将详细讲解如何使用PHP中的SOCKET功能来模拟提交POST消息,并通过分析提供的源码`postn.php`进行深入理解。 首先,我们来看一下SOCKET的基本概念。SOCKET是网络编程中的一种接口,它允许应用程序通过网络发送和...

    获取网页数据C#模拟提交post

    本教程将深入讲解如何在C#中通过POST方法模拟表单提交,从而获取网页数据。 首先,我们需要了解POST请求的工作原理。POST请求是HTTP协议中的一种方法,用于向服务器发送数据,常用于提交表单、上传文件等场景。与...

    PHP CURL 模拟提交(支持代理)

    PHP CURL 模拟提交(支持代理),一个封装好的功能能类,直接调用就好了

    Java 模拟Ajax POST GET 提交代码

    Java 模拟Ajax POST GET 提交代码,实测很好用。

    C#模拟自动提交

    10. **HTTP协议理解**:虽然本项目主要使用WebBrowser控件,但了解HTTP请求和响应的原理也有助于理解模拟提交的过程,特别是POST请求,它是表单提交的标准方式。 通过以上分析,我们可以看出“C#模拟自动提交”项目...

    C# post模拟提交接收图片存到服务器上

    在C#编程中,模拟POST提交通常用于模拟用户在网页上的表单提交行为,例如上传文件,特别是图片。这个过程涉及到HTTP协议的理解、文件流处理以及服务器端的存储逻辑。以下将详细介绍如何实现这个功能。 首先,理解...

    asp.net 模拟提交有文件上传的表单(通过http模拟上传文件)

    ***实现模拟提交带有文件上传功能的表单是通过模拟HTTP请求实现的,尤其是在某些环境限制下,比如使用单元测试框架进行测试时,常常需要绕过传统的HTML表单提交方式。本文将详细阐述如何通过编程方式模拟这种HTTP...

    模拟表单提交

    用jquery 实现一个模拟表单提交的类,不需要使用地址栏GET传递参数。

    php使用curl实现简单模拟提交表单功能

    首先,模拟提交表单通常包括以下几个步骤: 1. 初始化cURL会话。 2. 设置cURL选项,包括请求的URL、请求方式、POST数据等。 3. 执行cURL会话。 4. 关闭cURL会话并输出结果。 在PHP中使用cURL首先需要调用curl_init...

    PHPCURL模拟登录获取及提交数据的函数.pdf

    模拟提交数据 PHPCURL库也提供了多种方式来模拟提交数据。例如,在模拟登录函数`vlogin`中,我们使用`CURLOPT_POST`选项来发送POST请求,并使用`CURLOPT_POSTFIELDS`选项来设置提交的数据包。 模拟获取内容 ...

    详解php curl带有csrf-token验证模拟提交方法

    首先,讲解模拟提交的基础步骤,这包括初始化curl会话、设置必要的选项,如URL、来路(Referer)、用户代理(User-Agent)。来路是指当前请求页面的来源页面,正确的来路设置可以避免一些网站的安全检测。用户代理则...

Global site tag (gtag.js) - Google Analytics