模拟get和post请求

尊重劳动者的成果,本文参考链接:https://www.cnblogs.com/amunote/p/4126548.html
尊重劳动者的成果,本文参考链接:https://www.cnblogs.com/amunote/p/4126548.html
尊重劳动者的成果,本文参考链接:https://www.cnblogs.com/amunote/p/4126548.html

我修改了一些参数获取的方式

package test.httputil;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.util.Map;

/**
* 文件名:HttpUtil
* 作 者:Miles zhu
* 时 间:2019/6/27 13:41
* -------------------------
* 功能和描述:手动实现一个能模拟get和post请求的工具类
**/
public class HttpUtil {
/**
* 模拟get请求
*
* @param urlStr
* @param mapParam
* @return
*/
public static String get(String urlStr, Map<String, Object> mapParam) {
//先对参数进行处理
urlStr = urlStr + "?" + getParamString(mapParam);
System.out.println(urlStr);
//定义连接
HttpURLConnection conn = null;
//定义答应输出流
PrintWriter writer = null;
try {
//创建URL对象
URL url = new URL(urlStr);

//获取URL的连接
conn = (HttpURLConnection) url.openConnection();

//设置请求属性
setHttpUrlConnection(conn, "GET");

//建立连接
conn.connect();

//获取响应的内容
return readResponseContent(conn.getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != conn) conn.disconnect();
}
return null;
}

private static String readResponseContent(InputStream in) throws IOException {
Reader reader = null;
StringBuilder content = new StringBuilder();
try {
reader = new InputStreamReader(in);
char[] buffer = new char[1024];
int head = 0;
while ((head = reader.read(buffer)) > 0) {
content.append(new String(buffer, 0, head));
}
return content.toString();
} finally {
if (null != in) in.close();
if (null != reader) reader.close();
}
}

/**
* 设置http连接属性
*
* @param conn
* @param requestMethod
* @throws ProtocolException
*/
private static void setHttpUrlConnection(HttpURLConnection conn, String requestMethod) throws ProtocolException {

//设置请求方式
conn.setRequestMethod(requestMethod);

// 1.Accept: image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, application/vnd.ms -powerpoint, application/vnd.ms- excel, application/msword, application/x- shockwave-flash, */*
// 2.Accept-Language: zh-cn
// 3.Accept-Encoding: gzip, deflate
// 4.User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; .NET CLR 1.1.4322)
// 5.Host: hyg
// 6.Connection: Keep-Alive
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("Accept-Language", "zh-CN");
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
conn.setRequestProperty("Proxy-Connection", "Keep-Alive");

if (null != requestMethod && "POST".equals(requestMethod)) {
conn.setDoOutput(true);
conn.setDoInput(true);
}
}


public static String post(String urlStr, Map<String, Object> paramMap) throws Exception {
HttpURLConnection conn = null;
PrintWriter writer = null;
try {
//创建URL对象
URL url = new URL(urlStr);
//获取请求参数
String param = getParamString(paramMap);
//获取URL连接
conn = (HttpURLConnection) url.openConnection();
//设置通用请求属性
setHttpUrlConnection(conn, "POST");
//建立实际的连接
conn.connect();
//将请求参数写入请求字符流中
writer = new PrintWriter(conn.getOutputStream());
writer.print(param);
writer.flush();
//读取响应的内容
return readResponseContent(conn.getInputStream());
} finally {
if (null != conn) conn.disconnect();
if (null != writer) writer.close();
}
}

/**
* 处理参数,进行拼接
*
* @param paramMap
* @return
*/
private static String getParamString(Map<String, Object> paramMap) {
if (null == paramMap || paramMap.isEmpty()) {
return "";
}
StringBuilder builder = new StringBuilder();
for (String key : paramMap.keySet()) {
builder.append("&")
.append(key).append("=").append(paramMap.get(key));
}
return builder.deleteCharAt(0).toString();
}
}

测试类
package test.httputil;

import com.alibaba.fastjson.JSON;
import test.httputil.utils.ICBCBase64Utils;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

package test.httputil;

import com.alibaba.fastjson.JSON;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

/**
* 文件名:HttpUtilDemo
* 作 者:Miles zhu
* 时 间:2019/6/27 14:00
* -------------------------
* 功能和描述:
**/
public class HttpUtilDemo {

public static void main(String[] args) throws UnsupportedEncodingException {
Map<String, Object> map = new HashMap<>();
String str = "工资";
byte[] gbks = str.getBytes("GBK");
String gbk = new String(gbks, "GBK");
System.out.println(gbk);
map.put("username", gbk);
map.put("age", 12);

Map<String, Object> data = new HashMap<>();

//String gbk1 = ICBCBase64Utils.getrevFromBASE64(gbk.getBytes("GBK"));
// map.put("username", gbk1);
// System.out.println("gbk1: "+gbk1);
data.put("data", JSON.toJSONString(map));
try {
HttpUtil.post("http://127.0.0.1:5555/test", map);
} catch (Exception e) {
e.printStackTrace();
}
}
}

请求接收端:
package com.gaia.springboot.controller;

import com.gaia.springboot.utils.ICBCBase64Utils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.io.UnsupportedEncodingException;

package com.gaia.springboot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import java.util.Map;

/**
* 文件名:UserController
* 作 者:Miles zhu
* 时 间:2019/6/27 13:58
* -------------------------
* 功能和描述:
**/
@RestController
public class UserController {

@RequestMapping("/user")
public void getUser(@RequestParam("data") String data){
System.out.println(data);

Map<String, String> dataMap = JSON.parseObject(data, new TypeReference<Map<String, String>>()
{
});

String age = dataMap.get("age");
System.out.println(age);
String username = dataMap.get("username");
System.out.println(username);
System.out.println("user.....");
}


@RequestMapping("/user1")
public String getUser(){
System.out.println("user.....");
return "user1111";
}
}

尊重劳动者的成果,本文参考链接:https://www.cnblogs.com/amunote/p/4126548.html
尊重劳动者的成果,本文参考链接:https://www.cnblogs.com/amunote/p/4126548.html
尊重劳动者的成果,本文参考链接:https://www.cnblogs.com/amunote/p/4126548.html
 
原文地址:https://www.cnblogs.com/zyzblogs/p/11101631.html