Java 模拟html表单(form)提交数据 包含多文件 上传 表单提交 for j2me j2se android
我们先来看一下用html写简单的表单(form)是什么样的,如下:
- <html>
- <head>
- <title>上传文件测试页面</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- </head>
- <body>
- <form method="post" action="http://your_address" enctype="multipart/form-data">
- <input type='hidden' id="do" name="do" value="justDoIt"/>
- <fieldset>
- <label> 名称:</label><input type='text' id='myname' name='myname' size='35' maxlength='255'><br/>
- <label>上传文件:</label><input type='file' id='uploadFile' name="uploadFile" size='35' maxlength='255'><br/>
- <label>描述:</label><br/>
- <textarea rows="5" cols="100" id='description' name='description' >
- </fieldset>
- <fieldset>
- <input type='submit' id='submit'/>
- <input type='reset' id='reset'/>
- </fieldset>
- </form>
- </body>
- </html>
假设服务器都做好的情况下,我们点击"提交",就能完成文件上传工做。
需求:
用java 模拟html表单(form)提交数据 包含多文件 上传 表单提交。
不用多说,码农的风格直接上代码,说明全在代码上了,用法参见main方法s
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.ArrayList;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.List;
-
- import java.net.HttpURLConnection;
- import java.net.URL;
-
-
-
-
- public class HttpMultipartRequest {
-
- static final String BOUNDARY = "----------V2ymHFg03ehbqgZCaKO6jy";
-
- public static void main(String[] args) {
-
- List<String[]> stringParams = new ArrayList<String[]>();
- stringParams.add(new String[]{"do", "justDoIt"});
- stringParams.add(new String[]{"myname", "aa我是一个测试cc123"});
- stringParams.add(new String[]{"description", "bb我是码农我是一个测试我是一个测试cc567"});
-
- List<String[]> fileParams = new ArrayList<String[]>();
- fileParams.add(new String[]{"uploadFile", "我是码农的一个测试.zip", "application/zip", "D://我是一个测试.zip"});
- HttpMultipartRequest req = new HttpMultipartRequest("http://your_address", stringParams, fileParams);
- try {
- byte[] response = req.sendPost();
- System.out.println(new String(response));
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- }
-
-
- private String urlStr;
-
- private List<String[]> strParams;
-
- private List<String[]> fileParams;
-
-
-
-
-
-
-
- public HttpMultipartRequest(String urlStr, List<String[]> strParams, List<String[]> fileParams) {
- this.urlStr = urlStr;
- this.strParams = strParams;
- this.fileParams = fileParams;
-
- }
-
-
-
-
-
-
- public byte[] sendPost() throws Exception {
-
- HttpURLConnection hc = null;
-
- ByteArrayOutputStream bos = null;
-
- InputStream is = null;
-
- byte[] res = null;
-
- try {
- URL url = new URL(urlStr);
- hc = (HttpURLConnection) url.openConnection();
-
- hc.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
- hc.setRequestProperty("Charsert", "UTF-8");
-
- hc.setDoOutput(true);
- hc.setDoInput(true);
- hc.setUseCaches(false);
- hc.setRequestMethod("POST");
-
- OutputStream dout = hc.getOutputStream();
-
-
- String boundary = BOUNDARY;
-
- StringBuffer resSB = new StringBuffer("/r/n");
-
- String endBoundary = "/r/n--" + boundary + "--/r/n";
-
- if(strParams != null){
- for(String[] parsm : strParams){
- String key = parsm[0];
- String value = parsm[1];
- resSB.append("Content-Disposition: form-data; name=/"").append(key).append("/"/r/n").append("/r/n").append(
- value).append("/r/n").append("--").append(boundary).append("/r/n");
- }
- }
- String boundaryMessage = resSB.toString();
-
-
- dout.write( ("--"+boundary+boundaryMessage).getBytes("utf-8") );
-
-
-
- resSB = new StringBuffer();
- if(fileParams != null){
- for(int i=0, num=fileParams.size(); i<num; i++){
- String[] parsm = fileParams.get(i);
- String fileField = parsm[0];
- String fileName = parsm[1];
- String fileType = parsm[2];
- String filePath = parsm[3];
-
- resSB.append("Content-Disposition: form-data; name=/"").append(fileField).append("/"; filename=/"").append(
- fileName).append("/"/r/n").append("Content-Type: ").append(fileType).append("/r/n/r/n");
-
- dout.write( resSB.toString().getBytes("utf-8") );
-
-
- File file = new File(filePath);
- DataInputStream in = new DataInputStream(new FileInputStream(file));
- int bytes = 0;
- byte[] bufferOut = new byte[1024 * 5];
- while ((bytes = in.read(bufferOut)) != -1) {
- dout.write(bufferOut, 0, bytes);
- }
-
- if(i<num-1){
- dout.write( endBoundary.getBytes("utf-8") );
- }
-
- in.close();
- }
-
- }
-
-
- dout.write( endBoundary.getBytes("utf-8") );
-
- dout.close();
-
- int ch;
-
- is = hc.getInputStream();
-
- bos = new ByteArrayOutputStream();
- while ((ch = is.read()) != -1) {
- bos.write(ch);
- }
- res = bos.toByteArray();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (bos != null)
- bos.close();
-
- if (is != null)
- is.close();
-
- } catch (Exception e2) {
- e2.printStackTrace();
- }
- }
- return res;
- }
-
-
- }
分享到:
相关推荐
### C#以POST方式模拟提交表单 - 关键知识点解析 #### 一、知识点概览 本文档将基于“c#以POST方式模拟提交表单”这一主题进行深入解析,主要内容涉及C#语言如何实现HTTP POST请求来模拟提交表单数据,并通过具体的...
模拟提交工具,如题目中提到的,允许开发者或测试人员在没有实际浏览器环境的情况下,模拟浏览器进行GET或POST请求。这类工具可以帮助开发者调试API,验证服务器端的响应,或进行自动化测试。例如,`AutoRestUtil....
HTTPS模拟提交 demo,关于 https技术demo,有用的模拟技术
在IT行业中,模拟提交是一种常见的自动化测试和网页交互技术,主要应用于登录系统、数据抓取、API测试等领域。本文将详细讲解如何通过编程方式实现模拟提交以获取提交后的HTML代码,以及相关技术的运用。 首先,...
在IT行业中,网络通信是不可或缺的一部分,而POST模拟提交数据是一项常见的任务,特别是在进行API测试、自动化脚本编写或者客户端与服务器交互时。本话题主要关注如何通过编程方式以字节流的形式模拟提交图片,并将...
模拟数据提交的范例 熟悉模拟提交的代码,也可以当测试Post使用!
使用HttpUrlConnection实现模拟提交表单的一个简单工具类,支持文件和普通参数
5. **批处理文件处理**:提供的资源中包含了批处理文件(post模拟提交文件中文乱码的问题处理.bat),这可能是一个解决此问题的示例脚本。批处理文件可以用来自动化上述的一些步骤,比如预先处理文件名和数据编码。 ...
本文将详细讲解如何使用PHP中的SOCKET功能来模拟提交POST消息,并通过分析提供的源码`postn.php`进行深入理解。 首先,我们来看一下SOCKET的基本概念。SOCKET是网络编程中的一种接口,它允许应用程序通过网络发送和...
本教程将深入讲解如何在C#中通过POST方法模拟表单提交,从而获取网页数据。 首先,我们需要了解POST请求的工作原理。POST请求是HTTP协议中的一种方法,用于向服务器发送数据,常用于提交表单、上传文件等场景。与...
PHP CURL 模拟提交(支持代理),一个封装好的功能能类,直接调用就好了
Java 模拟Ajax POST GET 提交代码,实测很好用。
10. **HTTP协议理解**:虽然本项目主要使用WebBrowser控件,但了解HTTP请求和响应的原理也有助于理解模拟提交的过程,特别是POST请求,它是表单提交的标准方式。 通过以上分析,我们可以看出“C#模拟自动提交”项目...
在C#编程中,模拟POST提交通常用于模拟用户在网页上的表单提交行为,例如上传文件,特别是图片。这个过程涉及到HTTP协议的理解、文件流处理以及服务器端的存储逻辑。以下将详细介绍如何实现这个功能。 首先,理解...
***实现模拟提交带有文件上传功能的表单是通过模拟HTTP请求实现的,尤其是在某些环境限制下,比如使用单元测试框架进行测试时,常常需要绕过传统的HTML表单提交方式。本文将详细阐述如何通过编程方式模拟这种HTTP...
用jquery 实现一个模拟表单提交的类,不需要使用地址栏GET传递参数。
首先,模拟提交表单通常包括以下几个步骤: 1. 初始化cURL会话。 2. 设置cURL选项,包括请求的URL、请求方式、POST数据等。 3. 执行cURL会话。 4. 关闭cURL会话并输出结果。 在PHP中使用cURL首先需要调用curl_init...
模拟提交数据 PHPCURL库也提供了多种方式来模拟提交数据。例如,在模拟登录函数`vlogin`中,我们使用`CURLOPT_POST`选项来发送POST请求,并使用`CURLOPT_POSTFIELDS`选项来设置提交的数据包。 模拟获取内容 ...
首先,讲解模拟提交的基础步骤,这包括初始化curl会话、设置必要的选项,如URL、来路(Referer)、用户代理(User-Agent)。来路是指当前请求页面的来源页面,正确的来路设置可以避免一些网站的安全检测。用户代理则...