java模拟发送form-data的请求方式

 更新时间:2020年05月05日 17:23:44   作者:NPException  
这篇文章主要介绍了java模拟发送form-data的请求方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我就废话不多说了,大家还是直接看代码吧!

package com.silot.test;
 
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
 
public class TestCli
{
  public static void main(String args[]) throws Exception
  {
    MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, "------------------------------0ea3fcae38ff", Charset.defaultCharset());
    multipartEntity.addPart("skey", new StringBody("哈哈哈哈哈", Charset.forName("UTF-8")));
    multipartEntity.addPart("operator", new StringBody("啦啦啦啦", Charset.forName("UTF-8")));
    multipartEntity.addPart("VrfKey", new StringBody("渣渣渣", Charset.forName("UTF-8")));
    multipartEntity.addPart("StatCode", new StringBody("00", Charset.forName("UTF-8")));
    multipartEntity.addPart("mass_id", new StringBody("1234", Charset.forName("UTF-8")));
    multipartEntity.addPart("reference_id", new StringBody("21231544", Charset.forName("UTF-8")));
 
    HttpPost request = new HttpPost("http://xiefei.s1.natapp.cc/v1/withdrawCallback");
    request.setEntity(multipartEntity);
    request.addHeader("Content-Type", "Content-Disposition: form-data; boundary=------------------------------0ea3fcae38ff");
 
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpResponse response = httpClient.execute(request);
 
    InputStream is = response.getEntity().getContent();
    BufferedReader in = new BufferedReader(new InputStreamReader(is));
    StringBuffer buffer = new StringBuffer();
    String line = "";
    while ((line = in.readLine()) != null)
    {
      buffer.append(line);
    }
 
    System.out.println("发送消息收到的返回:" + buffer.toString());
  }
}

补充知识:java模拟复杂表单post请求

java模拟复杂表单post请求

能支持文件上传

/**
	 * 支持复杂表单,比如文件上传
	 * @param formParam
	 * @return
	 * @throws Exception
	 */
	public static String postWithForm(FormParam formParam) throws Exception {
		String url = formParam.getUrl();
		String charset = "UTF-8";
		String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value.
		String CRLF = "\r\n"; // Line separator required by multipart/form-data.

		URLConnection connection = new URL(url).openConnection();
		connection.setDoOutput(true);
		connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
		try (
				OutputStream output = connection.getOutputStream();
				PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, charset), true);
			) {
			// make body param
			Map<String, String> bodyParam = formParam.getBodyParam();
			if (null != bodyParam) {
				for (String p : bodyParam.keySet()) {
					writer.append("--" + boundary).append(CRLF);
					writer.append("Content-Disposition: form-data; name=\"" + p + "\"").append(CRLF);
					writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF);
					writer.append(CRLF).append(bodyParam.get(p)).append(CRLF).flush();
				}
			}
			// Send file.
			Map<String, File> fileParam = formParam.getFileParam();
			if (null != fileParam) {
				for (String fileName : fileParam.keySet()) {
					writer.append("--" + boundary).append(CRLF);
					writer.append("Content-Disposition: form-data; name=\"" + fileName + "\"; filename=\""
							+ fileParam.get(fileName).getName() + "\"").append(CRLF);
					writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append(CRLF);
					writer.append("Content-Transfer-Encoding: binary").append(CRLF);
					writer.append(CRLF).flush();
					Files.copy(fileParam.get(fileName).toPath(), output);
					output.flush(); // Important before continuing with writer!
					writer.append(CRLF).flush(); // CRLF is important! It indicates end of boundary.
				}
			}
			// End of multipart/form-data.
			writer.append("--" + boundary + "--").append(CRLF).flush();
		}
		HttpURLConnection conn = (HttpURLConnection) connection;
		ByteArrayOutputStream bout = new ByteArrayOutputStream();
		int len;
		byte[] buffer = new byte[1024];
		while ((len = conn.getInputStream().read(buffer)) != -1) {
			bout.write(buffer, 0, len);
		}
		String result = new String(bout.toByteArray(), "utf-8");
		return result;
	}

FormParam封装类:

package net.riking.core.utils;

import java.io.File;
import java.util.Map;

public class FormParam {
	private String url;
//	private String auth;
//	/**
//	 * http请求头里的参数
//	 */
//	private Map<String, String> headerParam;
	/**
	 * 常规参数
	 */
	private Map<String, String> bodyParam;
	/**
	 * 待上传的文件参数 filename和file
	 */
	private Map<String, File> fileParam;

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

//	public String getAuth() {
//		return auth;
//	}
//
//	public void setAuth(String auth) {
//		this.auth = auth;
//	}
//
//	public Map<String, String> getHeaderParam() {
//		return headerParam;
//	}
//
//	public void setHeaderParam(Map<String, String> headerParam) {
//		this.headerParam = headerParam;
//	}

	public Map<String, String> getBodyParam() {
		return bodyParam;
	}

	public void setBodyParam(Map<String, String> bodyParam) {
		this.bodyParam = bodyParam;
	}

	public Map<String, File> getFileParam() {
		return fileParam;
	}

	public void setFileParam(Map<String, File> fileParam) {
		this.fileParam = fileParam;
	}
}

以上这篇java模拟发送form-data的请求方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JAVA SpringBoot jar程序 Systemctl生产环境部署方案

    JAVA SpringBoot jar程序 Systemctl生产环境部署方案

    这篇文章主要介绍了JAVA SpringBoot jar程序 Systemctl生产环境部署方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • java中的常用集合类整理

    java中的常用集合类整理

    本篇文章给大家带来的内容是关于java中List集合及其实现类的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。下面我们就来学习一下吧,希望能给你带来帮助
    2021-06-06
  • 基于MyBatis的数据持久化框架的使用详解

    基于MyBatis的数据持久化框架的使用详解

    Mybatis是一个优秀的开源、轻量级持久层框架,它对JDBC操作数据库的过程进行封装。本文将为大家讲解一下基于MyBatis的数据持久化框架的使用,感兴趣的可以了解一下
    2022-08-08
  • Java中多线程下载图片并压缩能提高效率吗

    Java中多线程下载图片并压缩能提高效率吗

    本文主要介绍了Java中多线程下载图片并压缩能提高效率吗,很多人都想知道这个问题,本文就来详细介绍一下,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java线程中的ThreadLocal类解读

    Java线程中的ThreadLocal类解读

    这篇文章主要介绍了Java线程中的ThreadLocal类解读,ThreadLocal是一个泛型类,作用是实现线程隔离,ThreadLocal类型的变量,在每个线程中都会对应一个具体对象,对象类型需要在声明ThreadLocal变量时指定,需要的朋友可以参考下
    2023-11-11
  • 浅谈Mybatis分页插件,自定义分页的坑

    浅谈Mybatis分页插件,自定义分页的坑

    这篇文章主要介绍了浅谈Mybatis分页插件,自定义分页的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java中有界队列的饱和策略(reject policy)原理解析

    Java中有界队列的饱和策略(reject policy)原理解析

    这篇文章主要介绍了Java中有界队列的饱和策略(reject policy)原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java实现自定义语言和表达式解析的解释器模式

    Java实现自定义语言和表达式解析的解释器模式

    Java解释器设计模式通过解析自定义语言和表达式,实现对复杂逻辑的处理,提高程序可扩展性和灵活性。它将语法解析和执行过程分离,通过抽象语法树和解释器实现对语言和表达式的解析和求值,避免了硬编码和复杂的条件判断,提高了程序的可读性和可维护性
    2023-04-04
  • spring与disruptor集成的简单示例

    spring与disruptor集成的简单示例

    本篇文章主要介绍了spring与disruptor集成的简单示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • SpringBoot中使用Zookeeper实现分布式锁的案例

    SpringBoot中使用Zookeeper实现分布式锁的案例

    本文主要介绍了SpringBoot中使用Zookeeper实现分布式锁的案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01

最新评论