Okhttp 向服务器发送请求(请求头,表单,post json数据)

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingfeng812/article/details/52130861 项目地址:https://github.
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingfeng812/article/details/52130861
项目地址:https://github.com/Arisono/Gradle-demo
 
 
/**
	 * @desc:post json数据提交   Header+params+json
	 */
	@SuppressWarnings("deprecation")
	public static void sendHeadersAndJSON() {

		// 表单提交 这种能满足大部分的需求
		RequestBody formBody = new FormBody.Builder()
				.add("jsonData", "{\"data\":\"121\",\"data1\":\"2232\"}")
				.add("username", "Arison+中文").add("password", "1111111")
				.build();

		String postBody = "{\"type\":\"post json提交\"}";
		String postBody2 = "{\"type2\":\"post json提交\"}";
		OkHttpClient client = new OkHttpClient();
		Request request = new Request.Builder()
				.url("http://localhost:8080/spring-mvc-showcase/api/getHeaders")
				.header("cookie", "JSESSIONID=EB36DE5E50E342D86C55DAE0CDDD4F6D")
				.addHeader("content-type", "application/json;charset:utf-8")
				.addHeader("Home", "china")// 自定义的header
				.addHeader("user-agent", "android")
				// .post(RequestBody.create(MEDIA_TYPE_TEXT, postBody))
				.post(formBody)
				// 表单提交
				.put(RequestBody.create(
						MediaType.parse("application/json; charset=utf-8"),
						postBody))// post json提交
				.put(RequestBody.create(
						MediaType.parse("application/json; charset=utf-8"),
						postBody2))// post json提交
				.build();
		try {
			Response response = client.newCall(request).execute();
			if (response.isSuccessful()) {
				String json = response.body().string();
				System.out.println(json);
				String post = JSON.parseObject(json).getString("postBody");
				System.out.println("转义之前:" + post);
				System.out.println("转义之后:" + URLDecoder.decode(post));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


	/**
	 * @desc:发送请求头以及请求参数 Header+params
	 */
	public static void sendHeadersAndParams() {
		String china_str = "";
		try {
			china_str = URLEncoder.encode("中文", "UTF-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		// 表单提交
		RequestBody formBody = new FormBody.Builder().add("query", "Hello")
				.add("username", "Arison").add("password", "1111111").build();
		// 第二个表单会覆盖第一个
		/*
		 * RequestBody formBody2 = new FormBody.Builder() .add("search",
		 * "Jurassic Park") .build();
		 */
		OkHttpClient client = new OkHttpClient();
		Request request = new Request.Builder()
				.url("http://localhost:8080/spring-mvc-showcase/api/getHeaders")
				.header("cookie", "JSESSIONID=EB36DE5E50E342D86C55DAE0CDDD4F6D")
				.addHeader("content-type", "text/html;charset:utf-8")
				.addHeader("Home", "china")// 自定义的header
				.addHeader("Home1", china_str)// 自定义的header 传中文
				.addHeader("user-agent", "android")
				// .post(RequestBody.create(MEDIA_TYPE_TEXT, postBody))
				.post(formBody)
				// .post(formBody2)
				.build();
		try {
			Response response = client.newCall(request).execute();
			if (response.isSuccessful()) {
				String json = response.body().string();
				System.out.println(json);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


	/**
	 * @desc:发送请求头
	 */
	public static void sendHeaders() {
		String china_str = "";
		try {
			china_str = URLEncoder.encode("中文", "UTF-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		OkHttpClient client = new OkHttpClient();
		Request request = new Request.Builder()
				.url("http://localhost:8080/spring-mvc-showcase/api/getHeaders")
				.header("cookie", "JSESSIONID=EB36DE5E50E342D86C55DAE0CDDD4F6D")
				.addHeader("content-type", "text/html;charset:utf-8")
				.addHeader("Home", "china")// 自定义的header
				.addHeader("Home1", china_str)// 自定义的header 传中文
				.addHeader("user-agent", "android").build();
		try {
			Response response = client.newCall(request).execute();
			if (response.isSuccessful()) {
				String json = response.body().string();
				System.out.println(json);
				String home1 = JSON.parseObject(json).getJSONObject("headers")
						.getString("home1");
				System.out.println(URLDecoder.decode(home1, "utf-8"));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


	/**
	 * @dec 基本测试
	 * @throws IOException
	 */
	public static void sendBasicRequest() {
		OkHttpClient client = new OkHttpClient();
		Request request = new Request.Builder().url("http://www.baidu.com")
				.build();

		try {
			Response response = client.newCall(request).execute();
			if (!response.isSuccessful()) {
				// throw new IOException("服务器端错误: " + response);
			}
			// 输入响应头
			Headers responseHeaders = response.headers();
			for (int i = 0; i < responseHeaders.size(); i++) {
				System.out.println(responseHeaders.name(i) + ": "
						+ responseHeaders.value(i));
			}
			// 输出响应实体
			// System.out.println(response.body().string());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


服务器核心方法:

/**接收请求头
	 * @return
	 */
	@RequestMapping(value = "/api/getHeaders")
	private @ResponseBody LinkedHashMap<String, Object>  receiveHeaders(
			HttpServletRequest request,
			@CookieValue(value = "JSESSIONID", required = false)
			String sessionId,@RequestBody String postBody) {
		LinkedHashMap<String, Object> result=new LinkedHashMap<String, Object>();
		Map<String, Object> header=new HashMap<String, Object>();
		Map<String, Object> params=new HashMap<String, Object>();
		result.put("postBody", postBody);
		@SuppressWarnings("rawtypes")
		Enumeration paramNames  =request.getParameterNames();
		while (paramNames.hasMoreElements()) {
			String key = (String) paramNames.nextElement();
			Object value =  request.getParameter(key);
			params.put(key, value);
		}
		result.put("params", params);
		@SuppressWarnings("rawtypes")
		Enumeration headerNames = request.getHeaderNames();
		while (headerNames.hasMoreElements()) {
			String key = (String) headerNames.nextElement();
			String value = request.getHeader(key);
			header.put(key, value);
		}
		result.put("headers", header);
		result.put("JSESSIONID", sessionId);
		System.out.println(result.toString());
		return result;
	}

参考文档:

https://github.com/square/okhttp/wiki/Recipes

相关文章
|
1天前
|
小程序 开发者
体验版小程序为何无法访问云端服务器后端接口(请求失败...(已完美解决附加图片))?
体验版小程序为何无法访问云端服务器后端接口(请求失败...(已完美解决附加图片))?
8 0
|
17天前
|
JavaScript API
本地开发环境请求服务器接口跨域的问题(vue的问题)
本地开发环境请求服务器接口跨域的问题(vue的问题)
11 1
|
23天前
|
弹性计算 网络安全 虚拟化
ECS数据问题之升级配置预防数据丢失如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
26天前
|
安全 数据处理 C#
C# Post数据或文件到指定的服务器进行接收
C# Post数据或文件到指定的服务器进行接收
|
30天前
|
JSON 数据格式
糊涂工具类(hutool)post请求设置body参数为json数据
糊涂工具类(hutool)post请求设置body参数为json数据
19 1
|
30天前
|
数据采集 缓存 前端开发
http和https请求服务器的时候在请求头部分都带什么到服务器呢?
HTTP和HTTPS请求头基本结构相似,HTTPS多了一层SSL/TLS加密。常见请求头如Accept(指定内容类型)、Authorization(身份验证)、Cookie(会话跟踪)、User-Agent(标识用户代理)等。HTTPS特有的头包括Upgrade-Insecure-Requests(升级到HTTPS)、Strict-Transport-Security(强制使用HTTPS)、Sec-Fetch-*(安全策略)和X-Content-Type-Options、X-Frame-Options等(增强安全性)。实际应用中,请求头会根据需求和安全策略变化。
20 0
|
1月前
|
消息中间件 关系型数据库 MySQL
Flink CDC产品常见问题之把flink cdc同步的数据写入到目标服务器失败如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
26天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
29天前
|
存储 弹性计算 数据可视化
要将ECS中的文件直接传输到阿里云网盘与相册(
【2月更文挑战第31天】要将ECS中的文件直接传输到阿里云网盘与相册(
415 4
|
1月前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程

热门文章

最新文章