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 的实现方法 在现代软件开发中,HTTP 请求与响应是客户端和服务端之间通信的基础。对于 Java 开发者来说,能够熟练掌握如何使用 Java 来构建 HTTP 请求并发送 JSON 数据是一项重要...
- POST请求:向服务器提交数据,常用于表单提交或API接口调用。 - 请求头设置:如设置User-Agent、Content-Type等。 - 请求体:用于POST请求时传递数据。 - 响应处理:接收服务器返回的状态码、数据和响应头。 ...
总结来说,当你需要在Java中模拟POST请求发送JSON数据时,可以根据项目需求选择合适的方法。如果对性能和简洁性有较高要求,可以使用`HttpURLConnection`;如果需要更丰富的功能和易用性,`HttpClient`可能是更好的...
本主题将深入探讨如何使用Java解析HTTP请求处理结果,包括发送GET和POST请求、处理响应、解析网页内容以及应对常见问题。 首先,Java中的HttpURLConnection是标准库中用于执行HTTP请求的核心类。我们可以使用它来...
在Web开发领域,"POST请求"是HTTP协议中的一种主要请求方法,用于向服务器发送数据,通常用于提交表单、创建资源或者更新已有数据。在本项目"WebProject"中,我们将深入探讨如何处理POST请求,特别是在B/S(Browser/...
在Java中,可以使用Apache HttpClient库发送POST请求,携带加密后的JSON数据。`Utils.sendPostByJsonString`方法可能就是执行这个任务的,它可能包含创建HttpPost对象,设置请求头,创建StringEntity并设置Content-...
3. **服务器端支持**:服务器端组件接收POST请求,解析JSON报文,执行相应的远程方法,并构造响应报文返回。 4. **错误处理**:按照JSON-RPC 2.0规范,JSONRPC4J会处理调用过程中可能出现的错误,将错误信息封装在...
例如,JavaScript中的fetch API或jQuery的$.ajax,Python的requests库,Java的HttpURLConnection或OkHttp库,它们都提供了便捷的接口来发送GET和POST请求。 当涉及文件上传时,POST请求特别有用。例如,使用...
【Nginx设置打印POST请求参数的方法】 在Web服务中,日志记录是排查问题、监控系统健康状态的重要工具。Nginx作为一款高性能的HTTP和反向代理服务器,其默认的日志配置并不包含POST请求的参数信息。当面对如描述中...
- doGet和doPost方法:Servlet中处理GET和POST请求的方法。 - HttpServletRequest和HttpServletResponse接口:分别用于获取请求信息和构建响应。 4. **HTTP连接管理**: - 长连接与短连接:HTTP/1.0默认为短连接...
在处理请求参数时,我们需要考虑到第三方的提交方式,这可能是POST的Http请求方法,提交报文的时候指定ContentType为application/json或者application/x-www-form-urlencoded。在这种情况下,我们需要兼容这两种...
3. **构建HTTP请求**:根据自定义的HTTP数据报文格式,构造POST或PUT请求。这通常包括创建请求头,设置Content-Type(如application/json或text/plain),并将串口数据作为实体内容。 4. **发送请求**:使用HTTP...
MAS_HTTPS短信接口是一种基于HTTPS协议的短信接口,支持POST请求方式,数据类型为JSON格式,并使用base64加密。 发送普通短信 发送普通短信业务能力允许HTTPS客户端向云MAS平台发送短信任务请求,云MAS平台接收到...
为了与这些服务交互,VB6客户端需要构造合适的请求报文,包括URL、请求头和可能的POST数据。如果是SOAP服务,还需要理解和生成符合SOAP规范的XML消息。 接下来,VB6应用需要解析从Java Web服务器返回的数据。如果是...
- 请求体(可选):在POST请求中,通常包含要发送的数据。 - 响应行:包含HTTP状态码、版本和状态消息。 - 响应头:提供关于响应的信息,如Content-Type、Content-Length等。 - 响应体:实际的响应内容,如HTML...
对于POST请求,你可以使用`postForEntity`或`exchange`方法。例如,向服务器提交JSON数据: ```java HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); ...
此外,还需要理解协议的报文格式,例如报文头、报文体的结构,以便正确地解析和构造协议报文。 开发过程中,会涉及到线程管理和并发控制,以处理多个并发连接和请求。Java的并发库,如`java.util.concurrent`,提供...
- **请求体**:POST请求时,通常在请求体中发送数据。 4. **解析HTTP响应**: - **状态行**:包含HTTP版本、状态码和状态消息,例如`HTTP/1.1 200 OK`。 - **响应头**:包含服务器信息、内容长度、内容类型等,...
接着,我们使用buildReqStr方法组装请求报文,并使用HttpUtil.postJson方法将消息推送到钉钉群中。 在buildReqStr方法中,我们首先创建了一个内容map,用于存储消息内容。然后,我们创建了一个atMap,用于存储通知...
当接收到POST请求时,Servlet可以从请求体中解析JSON数据,然后根据业务逻辑进行处理,如验证用户身份、查询数据库等。处理完成后,Servlet将结果封装为JSON格式并通过HTTP响应返回给客户端。 为了确保安全,我们...