`
helloandroid
  • 浏览: 276155 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
107f8db3-b009-3b79-938a-dafddb49ea79
Android腾讯微博客户...
浏览量:95836
社区版块
存档分类
最新评论

android中模拟http协议表单上传

阅读更多
利用ie浏览器插件httpwatch查看form表单上传时的数据封装格式,然后照着这数据格式自己一步一步封装






package com.android.cist.network.form;

import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HttpFormUtil {

	public static String post(String actionUrl, Map<String, String> params,FormFile[] files) {
		try {
			String enterNewline = "\r\n";
			String fix="--";
			String boundary="######";
			String MULTIPART_FORM_DATA = "multipart/form-data";
			
			URL url = new URL(actionUrl);
			
			HttpURLConnection con = (HttpURLConnection)url.openConnection();
			con.setDoInput(true);
			con.setDoOutput(true);
			con.setUseCaches(false);
			con.setRequestMethod("POST");
			con.setRequestProperty("Connection", "Keep-Alive");
			con.setRequestProperty("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*");
			con.setRequestProperty("Accept-Encoding", "gzip, deflate");
			con.setRequestProperty("Charset", "UTF-8");
			con.setRequestProperty("Content-Type", MULTIPART_FORM_DATA+ ";boundary=" + boundary);
			
			DataOutputStream ds = new DataOutputStream(con.getOutputStream());
			Set<String> keySet = params.keySet();
			Iterator<String> it = keySet.iterator();
			
			while(it.hasNext()){
				String key = it.next();
				String value = params.get(key);
				ds.writeBytes(fix+boundary+enterNewline);
				ds.writeBytes("Content-Disposition: form-data; "+"name=\"" + key + "\"" + enterNewline);
				ds.writeBytes(enterNewline);
				//ds.write(value.getBytes("UTF-8"));
				ds.writeBytes(value);//如果有中文乱码,保存改用上面的ds.writeBytes(enterNewline);那句代码
				ds.writeBytes(enterNewline);
			}
			
			if(files!=null&&files.length>0){
				ds.writeBytes(fix+boundary+enterNewline);
				ds.writeBytes("Content-Disposition: form-data; "+"name=\"" + files[0].getFormname() + "\"" +"; filename=\""+files[0].getFilname()+"\""+enterNewline);
				ds.writeBytes(enterNewline);
				ds.write(files[0].getData());
				ds.writeBytes(enterNewline);
			}
			
			ds.writeBytes(fix+boundary+fix+enterNewline);
			ds.flush();
			
			InputStream is = con.getInputStream();
			int ch;
			StringBuffer b = new StringBuffer();
			
			while((ch = is.read()) != -1){
				b.append((char)ch);
			}
			ds.close();
			
			return b.toString().trim();
			
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
	public static String encode(String url) {   
        try {   
            return URLEncoder.encode(url, "UTF-8");   
        } catch (UnsupportedEncodingException ex) {   
            return url;   
        }   
    }   

}


  • 大小: 40.3 KB
  • 大小: 178.5 KB
  • 大小: 105.7 KB
分享到:
评论

相关推荐

    Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传

    Android模拟 HTTP multipart/form-data 请求协议信息实现图片上传

    在 Android 上通过模拟 HTTP multipart/form-data 请求协议信息实现图片上传

    在Android平台上,实现图片上传通常涉及使用HTTP协议中的multipart/form-data请求类型,这是处理表单数据,特别是上传文件的标准方式。multipart/form-data允许我们在请求体中包含多个部分,每个部分可以是不同的...

    Android应用源码之31.模拟Http请求(.zip

    在Android应用开发中,模拟HTTP请求是至关重要的一个环节,特别是在与服务器进行数据交互时。本资料包聚焦于这一主题,提供了源码示例供学习参考。以下将详细讲解Android中进行HTTP请求的方法、原理以及涉及到的相关...

    从服务器获取数据,上传数据

    在Android客户端开发中,从服务器获取数据和上传数据是核心功能之一,这涉及到网络编程、数据解析、异步处理等多个技术领域。以下是对这些知识点的详细说明: 1. **网络编程**:Android客户端与服务器之间的通信...

    android客户端向服务端上传数据 post和get两种方式

    POST请求则允许在请求体中携带大量数据,如表单数据、XML或者文件,因此更适合上传或提交复杂数据。 1. GET请求: 在Android中,可以使用`HttpURLConnection`或`OkHttp`库来实现GET请求。通过设置URL并添加查询参数...

    Android客户端与服务器端的json数据交互(内含大量知识点)

    在Android应用开发中,客户端与服务器端的数据交互是不可或缺的一部分,JSON作为一种轻量级的数据交换格式,被广泛用于Android和服务器之间的通信。本教程将详细阐述Android客户端如何使用JSON进行数据交互,包括...

    使用POST方式登录QQ.rar

    POST请求是HTTP协议中的五种基本请求方法之一,用于向指定资源提交数据以请求服务器进行处理(如提交表单、上传文件等)。 2. **请求头和请求体**:在POST请求中,请求头(Request Headers)通常包含Content-Type...

    手机网站app

    POST则用于向服务器提交数据,通常用于表单提交或上传文件,参数包含在请求体中。在App中进行POST和GET交互,开发者需要理解HTTP请求的构建,包括设置请求头、添加请求体和处理响应数据。 4. **实例程序**:压缩包...

    coolaf1.2.2接口在线压力测试版-windows64位.zip

    放到自己服务器,自己用的 《接口在线压力测试工具coolaf1.2.1在Windows64位系统中的应用详解》 接口测试是软件开发过程中的重要...1. POST请求:POST请求常用于提交数据,如表单数据或上传文件。在压力测试中,coolaf

    服务器端测试GET、POST

    POST方法则更为复杂,常用于提交表单数据或上传文件。POST请求的数据被封装在请求体中,不会显示在URL上,因此可以传输大量数据,且更安全。不过,POST请求不支持缓存,且对于某些浏览器,用户可能无法直接书签或回...

    Qt Creator系列教程

    - **随机数生成**:学习Qt中随机数生成函数的使用,用于游戏或模拟场景。 #### 八、Qt 2D绘图系列 - **简单图形绘制**:介绍如何使用Qt绘图API绘制线条、矩形、圆等基本形状。 - **渐变填充**:掌握渐变色填充的...

Global site tag (gtag.js) - Google Analytics