zoukankan      html  css  js  c++  java
  • 模拟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
     
  • 相关阅读:
    UE4 WCF RestFul 服务器 读取JSON 数据并解析 简单实例
    Android aidl Binder框架浅析
    AIDL
    android 五种存储方式
    Android进程间通信机制
    Service全面总结
    Android平台中关于音频播放
    Android广播机制
    Cursor,CursorAdapter中的观察者模式解析
    ContentProvider和Uri详解
  • 原文地址:https://www.cnblogs.com/zyzblogs/p/11101631.html
Copyright © 2011-2022 走看看