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;
- }
-
-
- }
分享到:
相关推荐
HTTPS模拟提交 demo,关于 https技术demo,有用的模拟技术
c#以POST方式模拟提交表单 - 真功夫
模拟数据提交的范例 熟悉模拟提交的代码,也可以当测试Post使用!
POST GET HTTP REST 模拟浏览器GET或POST提交
post模拟提交图片 转换成字节流 模拟接收把图片另存为一个地方。存到服务器上。
使用HttpUrlConnection实现模拟提交表单的一个简单工具类,支持文件和普通参数
C# post模拟提交多个图片接收图片并存到存到服务器上。
PHP版SOCKET模拟提交POST消息 模拟邮箱登陆什么的就可以做了。
找个例子,我已经测试过了,是好用的,C#获取网页数据,post方式提交,希望对你有用
由代码自动做登录操作,无须手工干预录入用户名密码。
PHP CURL 模拟提交(支持代理),一个封装好的功能能类,直接调用就好了
Java 模拟Ajax POST GET 提交代码,实测很好用。
用jquery 实现一个模拟表单提交的类,不需要使用地址栏GET传递参数。
php 使用curl 进行简单模拟提交表单,供大家参考,具体内容如下 //初始化curl $ch = curl_init(); $url = 'xxx'; $option = [ CURLOPT_URL => $url, CURLOPT_HEADER => 1, CURLOPT_RETURNTRANSFER => 1, ]; ...
curl cmd 命令行模拟表单提交 解决windows 通过cmd 调用curl上传文件中文乱码的问题 资源包括 curl.exe 以及调用curl上传测试文件和表单内容的批处理文件
已做了案例,可以方便快速的将参数直接模拟Post提交给指定地址,有需要的同学可以看看如何实现的,简单快捷有效
我们暂且不说如何去模拟数据,通过一个简单的form看看当请求发生时,客户端提交了什么样的数据给服务端。 下面是一个简单的html form,两个文本输入框,一个文件上传(这里我选择一张图片),注意有文件上传的form的...
代码主要用于模拟一个浏览器页面的表单请求, 表单带验证码。 代码最终意义就是不打开浏览器通过程序直接提交http请求, 例如注册机 注册机 还有注册机 什么的~ 博客什么的太麻烦了 暂时就这样发吧
Java模拟表单post提交 HttpClient,Java开发者常用利器