项目里碰到过模拟ajax请求的案例,研究了一下,觉得 httpClient 是真心好用,由于模拟环境搞了大半天,httpclient就另外再写博文吧
下面的例子介绍流的方式发送和接收,这个就有点暴力了,想传啥都行:以字节流的方式发送数据(可以是任何数据)
看标题就知道了,简单粗暴的方法,管他什么格式,统统“流”过去,不过既然是模拟的,要配置好其他参数,对方才能正常接收到
发送方:
/**
* 以流的方式
* 发送文件和json对象
*
* @return
*/
public static String doPostFileStreamAndJsonObj(String url, List<String> fileList, JSONObject json) {
String result = "";//请求返回参数
String jsonString = json.toJSONString();//获得jsonstirng,或者toString都可以,只要是json格式,给了别人能解析成json就行
// System.out.println("================");
// System.out.println(xml);//可以打印出来瞅瞅
// System.out.println("================");
try {
//开始设置模拟请求的参数,额,不一个个介绍了,根据需要拿
String boundary = "------WebKitFormBoundaryUey8ljRiiZqhZHBu";
URL u = new URL(url);
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("connection", "Keep-Alive");
//这里模拟的是火狐浏览器,具体的可以f12看看请求的user-agent是什么
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Charsert", "UTF-8");
//这里的content-type要设置成表单格式,模拟ajax的表单请求
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
// 指定流的大小,当内容达到这个值的时候就把流输出
conn.setChunkedStreamingMode(10240000);
//定义输出流,有什么数据要发送的,直接后面append就可以,记得转成byte再append
OutputStream out = new DataOutputStream(conn.getOutputStream());
byte[] end_data = ("\r\n--" + boundary + "--\r\n").getBytes();// 定义最后数据分隔线
S