Java Http GET POST发送请求

Java Http GET POST发送请求

本文写了1个java 发送GET请求以及2个java 发送POST请求,新手,不喜勿喷!

背景:

这是一个使用魔宝支付的demo,首先需要移动端提交商城订单,请求平台签名接口进行签名并获取支付所需要的要素,对支付公司返回的信息验签后返回移动端这些要素,移动端启动支付公司SDK进行支付交易,后续还有接收交易结果通知消息。

说明

  • GET核心:CloseableHttpClient和CloseableHttpResponse,HttpGet
  • POST核心:HttpURLConnection和HttpPost

功能步骤说明

  1. 第一步:GET请求从服务器签名接口进行签名操作;
  2. 第二步:GET请求至魔宝支付进行获取支付所需要素;
  3. 第三步:POST验签魔宝返回的签名信息,防篡改

静态变量

第一步:签名

  • 在交易之前需要使用支付方提供的证书进行签名交易订单


/**
*   签名订单信息
*/
public static JSONObject testHttpGet(String data) throws UnsupportedEncodingException {
        CloseableHttpClient httpClient = HttpClients.custom().disableContentCompression().build();
        StringBuffer qUrl = new StringBuffer(signUrl);
        qUrl.append("?tranData=" + URLEncoder.encode(data, "UTF-8"));
        HttpGet httpget = new HttpGet(new String(qUrl));
        try {
            CloseableHttpResponse httpResponse = httpClient.execute(httpget);
            HttpEntity entity = httpResponse.getEntity();
            //返回内容
            String res = EntityUtils.toString(entity, "UTF-8");
            return JSONObject.parseObject(res);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

第二步:获取支付要素

  • 使用支付方规定的格式,签名后请求支付公司接口得到支付所需要的要素,支付公司返回要素以及签名信息
public static String getPayElements(JSONObject json) throws UnsupportedEncodingException {
        if (json.containsKey("message") && json.containsKey("signature")) {
            String message = json.getString("message");
            String signature = json.getString("signature");
            String param = "message=" + message + "&signature=" + signature;
            String paramEncode = URLEncoder.encode(param, "UTF-8");

            CloseableHttpClient httpClient = HttpClients.custom().disableContentCompression().build();
            StringBuffer qUrl = new StringBuffer(mobaoUrl);
            qUrl.append("?message=" + URLEncoder.encode(message, "UTF-8"));
            qUrl.append("&signature=" + URLEncoder.encode(signature, "UTF-8"));
            HttpGet httpget = new HttpGet(new String(qUrl));
            try {
                CloseableHttpResponse httpResponse = httpClient.execute(httpget);
                HttpEntity entity = httpResponse.getEntity();
                //返回内容
                String res = EntityUtils.toString(entity, "UTF-8");
                return res;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

第三步:验签

  • 获取支付要素时支付公司返回签名信息,需要进行验签,防止信息被篡改。
public static JSONObject verifySign(JSONObject jsonObject) {
        if (jsonObject.containsKey("message") && jsonObject.containsKey("signature")) {
            String message = jsonObject.getString("message");
            String signature = jsonObject.getString("signature");

            try {
                //创建连接
                URL url = new URL(verifyUrl);
                HttpURLConnection connection = (HttpURLConnection) url
                        .openConnection();
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setRequestMethod("POST");
                connection.setUseCaches(false);
                connection.setInstanceFollowRedirects(true);
//                connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式
                connection.setRequestProperty("Content-Type", "application/json");

                connection.connect();
                //POST请求
                DataOutputStream out = new DataOutputStream(connection.getOutputStream());
                JSONObject obj = new JSONObject();
                obj.put("message", message);
                obj.put("signature", signature);
                out.writeBytes(obj.toString());
                out.flush();
                out.close();

                //读取响应
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String lines;
                StringBuffer sb = new StringBuffer("");
                while ((lines = reader.readLine()) != null) {
                    lines = new String(lines.getBytes(), "utf-8");
                    sb.append(lines);
                }
                reader.close();
                // 断开连接
                connection.disconnect();
                return JSONObject.parseObject(sb.toString());
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return null;
    }

附:另外一个POST请求方式

public static String post(String json, String url) throws Exception{

        StringEntity entity = new StringEntity(json, "utf-8");
        entity.setContentType("application/json");

        DefaultHttpClient client = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(entity);

        HttpResponse response = client.execute(httpPost);
        InputStream inputStream = response.getEntity().getContent();
        StringBuffer buffer = new StringBuffer();
        InputStreamReader inputReader = new InputStreamReader(inputStream);
        BufferedReader bufferReader = new BufferedReader(inputReader);
        String str;
        while ((str = bufferReader.readLine()) != null) {
            buffer.append(str);
        }
        bufferReader.close();
        String jsonOut = buffer.toString();
        return jsonOut;
    }

我的联系方式:

- Q Q:1250052380

- 邮箱:[email protected]

时间: 2024-11-02 23:37:23

Java Http GET POST发送请求的相关文章

Java中Socket在发送请求的时候要分清print()和println()

近期在开发中需要一个功能,向第三方服务器发送我方数据的功能,对数据的封装格式要求特别严格,在组装数据完成后,发送给第三方服务器却怎么也通不过,查找了好久,也对比了对方给出来的数据样本,还是不行,后来检查代码和拦截发送的数据后才发现,在socket发送的时候,使用的是println()方法,这个方法会自动在数据的后面加上一个回车符,所以在对比数据的时候没有发现,改为print()后顺利通过了~~~

spring MVC 管理HttpClient---实现在java中直接向Controller发送请求

在spring MVC中,大多数时候是由客户端的页面通过ajax等方式向controller发送请求,但有时候需要在java代码中直接向controller发送请求,这时可以使用HttpCilent实现. 首先用到的包是httpclient-4.3.5.jar和httpcore-4.3.2.jar 先看下面代码: package module.system.common; import java.io.IOException; import java.util.ArrayList; import

Java爬虫(一)利用GET和POST发送请求,获取服务器返回信息

本人所使用软件 eclipse fiddle UC浏览器 分析请求信息 以知乎(https://www.zhihu.com)为例,模拟登陆请求,获取登陆后首页,首先就是分析请求信息. 用UC浏览器F12,点击Network,按F5刷新.使用自己账号登陆知乎后,点www.zhihu.com网址后,出现以下界面  在General中,看到请求方式是GET,在fiddle里请求构造中,方法选定GET. 下拉后,看到Request Header,将里面所有的内容复制下来,粘贴到fiddle的请求构造里 

java中原生的发送http请求(无任何的jar包导入)

1 package com.teamsun.pay.wxpay.util; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.URL; 8 import java.net.URLConnection; 9 import java.util.List;

【转】使用java程序模拟页面发送http的post请求

在web应用程序中,一般都是通过页面发送http的post请求,但也可以使用java程序来模拟页面发送请求,代码如下: [java] view plaincopy import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.

java 常见几种发送http请求案例

1 import java.io.FileOutputStream; 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.io.InputStreamReader; 5 import java.io.OutputStreamWriter; 6 import java.io.UnsupportedEncodingException; 7 import java.net.HttpURLConnection

java后台发送请求并获取返回值(续)

在java后端发送请求给另一个平台,从而给前端实现 "透传"的过程中,出现:数据请求到了并传到了前端,但是控制台打印时中文显示Unicode码而前端界面中中文显示不出来!!!开始怀疑是编码格式或透传过程中处理的问题,将编码格式进行了设置并查资料了解了一下透传过程中代码的处理方法,虽然最后发现是前后端定义的json串的属性名称不一致导致(后端传输数据中属性名label写成了lable...),但在此还是记录一下"透传"处理过程中处理数据流的三种方式. 主要是介绍经常用

Java生成二进制文件与Postman以二进制流的形式发送请求

业务描述: 模拟终端(智能家居)发送HTTP POST请求,请求参数为二进制流:而且,二进制流是加密后的数据,因此调试分两步: 1.Java代码生成加密后数据,并保存为二进制流文件 (电脑上的图片就是二进制流文件,只不过我们打开的时候,借助于电脑软件渲染为图片) 上代码片段: 1 byte[] oneshotBytes = reqParms.getBytes(); 2 log.info("length----->"+oneshotBytes.length); 3 //FileWr

java web前端发送请求的4种方式

表单 action, 链接href,js 绑定按钮 ajax绑定标签 <h1>通过表单提交参数</h1> <form action="/day46_v1/ServletDemo01?method=addUser" method="post"> 用户名:<input type="text" name="username"/><button>提交</button&g