利用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请求类型,这是处理表单数据,特别是上传文件的标准方式。multipart/form-data允许我们在请求体中包含多个部分,每个部分可以是不同的...
在Android应用开发中,模拟HTTP请求是至关重要的一个环节,特别是在与服务器进行数据交互时。本资料包聚焦于这一主题,提供了源码示例供学习参考。以下将详细讲解Android中进行HTTP请求的方法、原理以及涉及到的相关...
在Android客户端开发中,从服务器获取数据和上传数据是核心功能之一,这涉及到网络编程、数据解析、异步处理等多个技术领域。以下是对这些知识点的详细说明: 1. **网络编程**:Android客户端与服务器之间的通信...
POST请求则允许在请求体中携带大量数据,如表单数据、XML或者文件,因此更适合上传或提交复杂数据。 1. GET请求: 在Android中,可以使用`HttpURLConnection`或`OkHttp`库来实现GET请求。通过设置URL并添加查询参数...
在Android应用开发中,客户端与服务器端的数据交互是不可或缺的一部分,JSON作为一种轻量级的数据交换格式,被广泛用于Android和服务器之间的通信。本教程将详细阐述Android客户端如何使用JSON进行数据交互,包括...
POST请求是HTTP协议中的五种基本请求方法之一,用于向指定资源提交数据以请求服务器进行处理(如提交表单、上传文件等)。 2. **请求头和请求体**:在POST请求中,请求头(Request Headers)通常包含Content-Type...
POST则用于向服务器提交数据,通常用于表单提交或上传文件,参数包含在请求体中。在App中进行POST和GET交互,开发者需要理解HTTP请求的构建,包括设置请求头、添加请求体和处理响应数据。 4. **实例程序**:压缩包...
放到自己服务器,自己用的 《接口在线压力测试工具coolaf1.2.1在Windows64位系统中的应用详解》 接口测试是软件开发过程中的重要...1. POST请求:POST请求常用于提交数据,如表单数据或上传文件。在压力测试中,coolaf
POST方法则更为复杂,常用于提交表单数据或上传文件。POST请求的数据被封装在请求体中,不会显示在URL上,因此可以传输大量数据,且更安全。不过,POST请求不支持缓存,且对于某些浏览器,用户可能无法直接书签或回...
- **随机数生成**:学习Qt中随机数生成函数的使用,用于游戏或模拟场景。 #### 八、Qt 2D绘图系列 - **简单图形绘制**:介绍如何使用Qt绘图API绘制线条、矩形、圆等基本形状。 - **渐变填充**:掌握渐变色填充的...