`
robotmen
  • 浏览: 54419 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

JAVA实现HTTPS协议POST请求JSON报文

 
阅读更多
import java.io.ByteArrayOutputStream;  
import java.io.DataOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.net.URL;  
import java.security.KeyManagementException;  
import java.security.NoSuchAlgorithmException;  
import java.security.cert.CertificateException;  
import java.security.cert.X509Certificate;  

import javax.net.ssl.HostnameVerifier;  
import javax.net.ssl.HttpsURLConnection;  
import javax.net.ssl.SSLContext;  
import javax.net.ssl.SSLSession;  
import javax.net.ssl.TrustManager;  
import javax.net.ssl.X509TrustManager;  

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
  
public class PostJson {  
  
    private static class TrustAnyTrustManager implements X509TrustManager {  
    //该方法检查客户端的证书,若不信任该证书则抛出异常。由于我们不需要对客户端进行认证,因此我们只需要执行默认的信任管理器的这个方法。
    //JSSE中,默认的信任管理器类为TrustManager。
        public void checkClientTrusted(X509Certificate[] chain, String authType)  
                throws CertificateException {  
        }  
        //该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。在实现该方法时,也可以简单的不做任何处理,即一个空的函数体,由于不会抛出异常,它就会信任任何证书。
        public void checkServerTrusted(X509Certificate[] chain, String authType)  
                throws CertificateException {  
        }  
        //返回受信任的X509证书数组。
        public X509Certificate[] getAcceptedIssuers() {  
            return new X509Certificate[] {};  
        }  
    }  
  
    private static class TrustAnyHostnameVerifier implements HostnameVerifier {  
        public boolean verify(String hostname, SSLSession session) {  
            return true;  
        }  
    }  
  
    /** 
     * post方式请求服务器(https协议) 
     *  
     * @param url 
     *            请求地址 
     * @param content 
     *            参数 
     * @param charset 
     *            编码 
     * @return 
     * @throws NoSuchAlgorithmException 
     * @throws KeyManagementException 
     * @throws IOException 
     */  
    public static byte[] post(String url, String content, String charset)  
            throws NoSuchAlgorithmException, KeyManagementException,  
            IOException {  
    /*类HttpsURLConnection似乎并没有提供方法设置信任管理器。其实,HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。
    * HttpsURLConnection提供了方法setSSLSocketFactory(SSLSocketFactory)设置它使用的SSLSocketFactory对象。
    * SSLSocketFactory通过SSLContext对象来获得,在初始化SSLContext对象时,可指定信任管理器对象。
    * */
        SSLContext sc = SSLContext.getInstance("SSL");  
        sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },  
                new java.security.SecureRandom());  
  
        URL console = new URL(url);  
        HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();  
        conn.setSSLSocketFactory(sc.getSocketFactory());  
        conn.setHostnameVerifier(new TrustAnyHostnameVerifier());  
        conn.setDoOutput(true); 
        //设置请求头
        conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
        conn.connect();  
        DataOutputStream out = new DataOutputStream(conn.getOutputStream());  
        out.write(content.getBytes(charset));  
        // 刷新、关闭  
        out.flush();  
        out.close();  
        InputStream is = conn.getInputStream();  
        if (is != null) {  
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
            byte[] buffer = new byte[1024];  
            int len = 0;  
            while ((len = is.read(buffer)) != -1) {  
                outStream.write(buffer, 0, len);  
            }  
            is.close();  
            return outStream.toByteArray();  
        }  
        return null;  
    } 
    public static void main(String[] args) throws KeyManagementException, NoSuchAlgorithmException, IOException{
    String url = "https://xxx.xxx.xxx/path/to/dir/${action}";
    PostJson pj = new PostJson();
    String content=pj.getbaowen();
    String charset="UTF-8";
    
    byte[] a = pj.post(url, content, charset);
    String b = new String(a);
    System.out.println(b);
    
    }
    //构造嵌套的JSON报文方式,即在new一个JSONObject,并返回报文字符串
    public  String getbaowen(){
    JSONObject test= new JSONObject();
    test.put("xxxx", "");
    String resp= null;
        JSONObject obj = new JSONObject();
        obj.put("xxxxxx", "");   
        obj.put("test", test);
String query = obj.toString();
        return query;
    }
  
}  

  

HTTPS和HTTP的区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

----------------------------------------------------------------------------------------------------------------------

 

 

分享到:
评论

相关推荐

    java发送http请求报文json

    ### Java 发送 HTTP 请求报文 JSON 的实现方法 在现代软件开发中,HTTP 请求与响应是客户端和服务端之间通信的基础。对于 Java 开发者来说,能够熟练掌握如何使用 Java 来构建 HTTP 请求并发送 JSON 数据是一项重要...

    java实现http请求以及解析json与java对象转换 项目源代码实例

    - POST请求:向服务器提交数据,常用于表单提交或API接口调用。 - 请求头设置:如设置User-Agent、Content-Type等。 - 请求体:用于POST请求时传递数据。 - 响应处理:接收服务器返回的状态码、数据和响应头。 ...

    java模拟post请求发送json的例子

    总结来说,当你需要在Java中模拟POST请求发送JSON数据时,可以根据项目需求选择合适的方法。如果对性能和简洁性有较高要求,可以使用`HttpURLConnection`;如果需要更丰富的功能和易用性,`HttpClient`可能是更好的...

    Java 解析http请求处理结果

    本主题将深入探讨如何使用Java解析HTTP请求处理结果,包括发送GET和POST请求、处理响应、解析网页内容以及应对常见问题。 首先,Java中的HttpURLConnection是标准库中用于执行HTTP请求的核心类。我们可以使用它来...

    WebProject(POST请求)

    在Web开发领域,"POST请求"是HTTP协议中的一种主要请求方法,用于向服务器发送数据,通常用于提交表单、创建资源或者更新已有数据。在本项目"WebProject"中,我们将深入探讨如何处理POST请求,特别是在B/S(Browser/...

    AES报文加密1

    在Java中,可以使用Apache HttpClient库发送POST请求,携带加密后的JSON数据。`Utils.sendPostByJsonString`方法可能就是执行这个任务的,它可能包含创建HttpPost对象,设置请求头,创建StringEntity并设置Content-...

    jsonrpc4j-master.zip

    3. **服务器端支持**:服务器端组件接收POST请求,解析JSON报文,执行相应的远程方法,并构造响应报文返回。 4. **错误处理**:按照JSON-RPC 2.0规范,JSONRPC4J会处理调用过程中可能出现的错误,将错误信息封装在...

    网络请求网络请求网络请求网络请求

    例如,JavaScript中的fetch API或jQuery的$.ajax,Python的requests库,Java的HttpURLConnection或OkHttp库,它们都提供了便捷的接口来发送GET和POST请求。 当涉及文件上传时,POST请求特别有用。例如,使用...

    Nginx设置日志打印post请求参数的方法

    【Nginx设置打印POST请求参数的方法】 在Web服务中,日志记录是排查问题、监控系统健康状态的重要工具。Nginx作为一款高性能的HTTP和反向代理服务器,其默认的日志配置并不包含POST请求的参数信息。当面对如描述中...

    Java Web_HTTP协议详解第二讲

    - doGet和doPost方法:Servlet中处理GET和POST请求的方法。 - HttpServletRequest和HttpServletResponse接口:分别用于获取请求信息和构建响应。 4. **HTTP连接管理**: - 长连接与短连接:HTTP/1.0默认为短连接...

    Spring MVC请求参数与响应结果全局加密和解密详解

    在处理请求参数时,我们需要考虑到第三方的提交方式,这可能是POST的Http请求方法,提交报文的时候指定ContentType为application/json或者application/x-www-form-urlencoded。在这种情况下,我们需要兼容这两种...

    MAS_HTTPS短信接口文档1

    MAS_HTTPS短信接口是一种基于HTTPS协议的短信接口,支持POST请求方式,数据类型为JSON格式,并使用base64加密。 发送普通短信 发送普通短信业务能力允许HTTPS客户端向云MAS平台发送短信任务请求,云MAS平台接收到...

    vb6 调用java WEBSERVER

    为了与这些服务交互,VB6客户端需要构造合适的请求报文,包括URL、请求头和可能的POST数据。如果是SOAP服务,还需要理解和生成符合SOAP规范的XML消息。 接下来,VB6应用需要解析从Java Web服务器返回的数据。如果是...

    基于Java Socket构建的简单HTTP的客户端和服务器.zip

    - 请求体(可选):在POST请求中,通常包含要发送的数据。 - 响应行:包含HTTP状态码、版本和状态消息。 - 响应头:提供关于响应的信息,如Content-Type、Content-Length等。 - 响应体:实际的响应内容,如HTML...

    RestTemplate的使用及需要注意的地方

    对于POST请求,你可以使用`postForEntity`或`exchange`方法。例如,向服务器提交JSON数据: ```java HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); ...

    串口数据转换成http协议数据发送到云端

    3. **构建HTTP请求**:根据自定义的HTTP数据报文格式,构造POST或PUT请求。这通常包括创建请求头,设置Content-Type(如application/json或text/plain),并将串口数据作为实体内容。 4. **发送请求**:使用HTTP...

    电信第一二级网关开发API--Java.rar_JAVA 开发网关_smgp 网关_电信第一二级网关开发API--Java

    此外,还需要理解协议的报文格式,例如报文头、报文体的结构,以便正确地解析和构造协议报文。 开发过程中,会涉及到线程管理和并发控制,以处理多个并发连接和请求。Java的并发库,如`java.util.concurrent`,提供...

    HTTP.rar_HTTP

    - **请求体**:POST请求时,通常在请求体中发送数据。 4. **解析HTTP响应**: - **状态行**:包含HTTP版本、状态码和状态消息,例如`HTTP/1.1 200 OK`。 - **响应头**:包含服务器信息、内容长度、内容类型等,...

    java实现钉钉机器人消息推送的示例代码

    接着,我们使用buildReqStr方法组装请求报文,并使用HttpUtil.postJson方法将消息推送到钉钉群中。 在buildReqStr方法中,我们首先创建了一个内容map,用于存储消息内容。然后,我们创建了一个atMap,用于存储通知...

    http通信及servlet介绍

    当接收到POST请求时,Servlet可以从请求体中解析JSON数据,然后根据业务逻辑进行处理,如验证用户身份、查询数据库等。处理完成后,Servlet将结果封装为JSON格式并通过HTTP响应返回给客户端。 为了确保安全,我们...

Global site tag (gtag.js) - Google Analytics