java 模拟Http请求 提交图片和数据

1,伪造请求

package com.sxb.web.v2.wh.unittest;

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import net.sf.jmimemagic.Magic;

import net.sf.jmimemagic.MagicMatch;

public class HttpPostUploadUtil {

/**

* @param args

* @throws FileNotFoundException

*/

public static void main(String[] args) throws FileNotFoundException {

String filepath = "C:\\Users\\Administrator\\Desktop\\xx.png";

String urlStr = "http://192.168.0.98:8086/app/wh/test/image.json";

Map<String, String> textMap = new HashMap<String, String>();

textMap.put("name1", "testname1");

Map<String, InputStream> fileMap = new HashMap<String, InputStream>();

fileMap.put("userfile", new FileInputStream(new File(filepath)) );

String ret = HttpPostUploadUtil.formUpload(urlStr, textMap, fileMap);

System.out.println(ret);

}

/**

* 上传图片

* @param urlStr

* @param textMap

* @param fileMap

* @return

*/

public static String formUpload(String urlStr, Map<String, String> textMap, Map<String, InputStream> fileMap) {

String res = "";

HttpURLConnection conn = null;

String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符

try {

URL url = new URL(urlStr);

conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(5000);

conn.setReadTimeout(30000);

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setUseCaches(false);

conn.setRequestMethod("POST");

conn.setRequestProperty("Connection", "Keep-Alive");

conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");

conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

OutputStream out = new DataOutputStream(conn.getOutputStream());

// text

if (textMap != null) {

StringBuffer strBuf = new StringBuffer();

Iterator<Map.Entry<String, String>> iter = textMap.entrySet().iterator();

while (iter.hasNext()) {

Map.Entry<String, String> entry = iter.next();

String inputName = (String) entry.getKey();

String inputValue = (String) entry.getValue();

if (inputValue == null) {

continue;

}

strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");

strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n");

strBuf.append(inputValue);

}

out.write(strBuf.toString().getBytes());

}

// file

if (fileMap != null) {

Iterator<Map.Entry<String, InputStream>> iter = fileMap.entrySet().iterator();

while (iter.hasNext()) {

Map.Entry<String, InputStream> entry = iter.next();

String inputName = (String) entry.getKey();

FileInputStream inputValue =   (FileInputStream) entry.getValue();

if (inputValue == null) {

continue;

}

String filename = System.currentTimeMillis()+".png";

String contentType = "image/png";

StringBuffer strBuf = new StringBuffer();

strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");

strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + filename + "\"\r\n");

strBuf.append("Content-Type:" + contentType + "\r\n\r\n");

out.write(strBuf.toString().getBytes());

DataInputStream in = new DataInputStream(inputValue);

int bytes = 0;

byte[] bufferOut = new byte[1024];

while ((bytes = in.read(bufferOut)) != -1) {

out.write(bufferOut, 0, bytes);

}

in.close();

}

}

byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();

out.write(endData);

out.flush();

out.close();

// 读取返回数据

StringBuffer strBuf = new StringBuffer();

BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

String line = null;

while ((line = reader.readLine()) != null) {

strBuf.append(line).append("\n");

}

res = strBuf.toString();

reader.close();

reader = null;

} catch (Exception e) {

System.out.println("发送POST请求出错。" + urlStr);

e.printStackTrace();

} finally {

if (conn != null) {

conn.disconnect();

conn = null;

}

}

return res;

}

}

2,接收伪造请求的数据

@Controller

@RequestMapping("/wh/test")

public class TestController {

/**

*

*

* ***/

@RequestMapping("/image")

public void image(HttpServletRequest request,HttpServletResponse response,@RequestParam(value="userfile",required=false) CommonsMultipartFile[]  images) throws IOException{

Map<String, Object> retMp = null;

try {

System.out.println("--images:"+images[0].getInputStream());

} catch (Exception e) {

retMp = RetUtil.getRetValue(false, "{}", "服务器异常", 500);

e.printStackTrace();

}finally{

response.setContentType("application/json; charset=UTF-8");

response.getWriter().print(new Gson().toJson("--xx-:"+images[0].getInputStream().toString()));

}

}

}

时间: 2024-10-29 02:49:25

java 模拟Http请求 提交图片和数据的相关文章

Java模拟POST请求发送二进制数据

在进行程序之间数据通信时我们有时候就需要自定义二进制格式,然后通过HTTP进行二进制数据交互.交互的示例代码如下: public static void main(String[] args) { String result = ""; try { String url = "http://localhost:8080/Demo/SiteApi"; URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection co

java模拟post请求发送json数据

import com.alibaba.fastjson.JSONObject; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apa

java模拟post请求发送json

java模拟post请求发送json,用两种方式实现,第一种是HttpURLConnection发送post请求,第二种是使用httpclient模拟post请求, 方法一: 1 package main.utils; 2 3 import java.io.*; 4 import java.net.HttpURLConnection; 5 import java.net.URL; 6 7 public class HttpUtilTest { 8 Log log = new Log(this.g

ASP模拟POST请求异步提交数据的方法

这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限制了GET方式,只能通过POST数据提交,这个时候我们可以通过asp来实现模拟提交post数据,网上有挺多这样的例子的.下面的是我自己写的比较简洁易懂的函数. 首先,需要一个编码设置的函数,因为asp一般为gbk的,而标准的网站现在大都使用utf-8的.所以需要转换. 代码如下: function

java 模拟http请求

整理一下用java模拟http请求的方法,如果有不正确的地方希望大家指正,如果大家有什么更好的方法欢迎提出 1.URLConnection可以向URL地址发送请求,读取URL的资源.建立和URL的连接通常需要一下几步: 创建URL对象,并通过调用openConnection方法获得URLConnection对象: 设置URLConnection参数和普通请求属性: 向远程资源发送请求: 远程资源变为可用,程序可以访问远程资源的头字段和通过输入流来读取远程资源返回的信息. import java.

关于curl java 模拟http请求

近期笔者项目需求java模拟http请求,获取dns解析 tcp连接等详细耗时信息. java api中提供的urlConnection 及apache提供的httpClient都不能胜任该需求,二次开发太费时间.于是google之. 最后 得出两种解决办法: 一是使用HTTP4J. 该开源项目使用socket方式,模拟请求,记录时间戳,基本满足需求.对于header自定义等细节,可在此基础上比较方便的二次开发.只是,其中有一些bug需要修复, 如https链接时获取不到ssl时间等.使用该项目

curl java 模拟http请求

curl java 模拟http请求 直接上代码: 1 public static void main(String args[]) throws Exception { 2 3 String url = "https://www.baidu.com"; 4 String[] cmds = {"curl",url}; 5 ProcessBuilder pb = new ProcessBuilder(cmds); 6 pb.redirectErrorStream(tr

Java模拟新浪微博登陆抓取数据

前言:  兄弟们来了来了,最近有人在问如何模拟新浪微博登陆抓取数据,我听后默默地抽了一口老烟,暗暗的对自己说,老汉是时候该你出场了,所以今天有时间就整理整理,浅谈一二. 首先:  要想登陆新浪微博需要预登陆,即是将账号base64加密,密码rsa加密以及请求http://login.sina.com.cn/sso/prelogin.php链接获取一些登陆需要参数,返回的接送字符串如: {"retcode":0,"servertime":1487292003,&quo

Java模拟http请求远程调用接口工具类

package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 用于模拟HTTP请求中GET/POST方式 * @author landa *