用http和https请求进行访问数据
来源:互联网 发布:php 手机短信接口 编辑:程序博客网 时间:2024/06/06 16:31
首先,我是用tomcat作为服务器,默认https不开启,需要自行设置,参考http://blog.csdn.net/w_liujun/article/details/41541267
和参考的文章一样,使用8443端口,需要在tomcat-conf-server.xml进行配置。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" enableLookups="false" acceptCount="100" disableUploadTimeout="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="C:/Program Files/Java/keystore-file" keystorePass="123456" />
放在如下注释的前面(在这里被坑了,导致一直无法访问到8443端口)
<!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> -->配置完后需要重启tomcat服务器。
然后我们是通过编写servlet处理请求,请求数据格式是json,返回数据格式也是json,并且打印返回的数据。
首先在web.xml中配置servlet,java文件是controller包下的JSONServlet类,访问路径是/servlet/JSONServlet.
<servlet> <servlet-name>JSONServlet</servlet-name> <servlet-class>controller.JSONServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>JSONServlet</servlet-name> <url-pattern>/servlet/JSONServlet</url-pattern> </servlet-mapping>
因为要应用json,所以要导入相应的包(json-lib等等)链接:http://download.csdn.net/detail/tyfengyu/4478154
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class JSONServlet extends HttpServlet{protected void doGet(HttpServletRequest request,HttpServletResponse response){doPost(request, response);}protected void doPost(HttpServletRequest request,HttpServletResponse response){BufferedReader br;StringBuilder sb = new StringBuilder();// 获取请求try {request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8"); br = new BufferedReader(new InputStreamReader(request.getInputStream())); String line = null; while((line = br.readLine())!=null){ sb.append(line); }} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}catch (IOException e) {e.printStackTrace();} // 将资料解码 String reqBody = sb.toString(); System.out.println("reqBody:"+reqBody);JSONObject JSONVersion = JSONObject.fromObject(reqBody);System.out.println(JSONVersion.toString());// 获取版本号进行比较String UserVersion = JSONVersion.getString("filename");//System.out.println("UserVersion" + UserVersion); //查询数据库返回真实信息// 返回JSON文件String result = JSONString();try {response.getWriter().write(result);} catch (IOException e) {e.printStackTrace();}}public String JSONString(){// json对象JSONObject gujian = new JSONObject();gujian.put("version", "2.27");JSONObject ALL =new JSONObject();ALL.put("gujian", gujian); // String result = "{"+jsonArray.toString()+"}";String result = ALL.toString();return result;}}
http请求:(httpRequest类)
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import net.sf.json.JSONObject;public class HttpRequest { public static final String ADD_URL = "http://localhost:8080/test2/servlet/JSONServlet"; // public static final String ADD_URL = "http://192.168.4.97:35357/v2.0/tokens"; public static void appadd() throws IOException { HttpURLConnection connection=null; try { //创建连接 URL url = new URL(ADD_URL); connection = (HttpURLConnection) url.openConnection(); //设置http连接属性 connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestMethod("POST"); // 可以根据需要 提交 GET、POST、DELETE、INPUT等http提供的功能 connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); //设置http头 消息 connection.setRequestProperty("Content-Type","application/json"); //设定 请求格式 json,也可以设定xml格式的 //connection.setRequestProperty("Content-Type", "text/xml"); //设定 请求格式 xml, connection.setRequestProperty("Accept","application/json");//设定响应的信息的格式为 json,也可以设定xml格式的 // connection.setRequestProperty("X-Auth-Token","xx"); //特定http服务器需要的信息,根据服务器所需要求添加 connection.connect(); //添加 请求内容 JSONObject user = new JSONObject(); user.put("filename", "2.26"); OutputStream out = connection.getOutputStream(); out.write(user.toString().getBytes()); 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); } System.out.println(sb); reader.close(); //// 断开连接 connection.disconnect(); } 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(); } } public static void main(String[] args) throws IOException { appadd(); } }
https请求,本地测试忽略证书进行请求 (httpsRequest类)
import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLSession;import net.sf.json.JSONObject;public class HttpsRequest {// 表示服务器端的urlprivate static String PATH = "https://localhost:8443/test2/servlet/JSONServlet";private static URL url;static HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost()); return true; } }; public HttpsRequest() {// TODO Auto-generated constructor stub} private static void trustAllHttpsCertificates() throws Exception { javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new miTM(); trustAllCerts[0] = tm; javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext .getInstance("SSL"); sc.init(null, trustAllCerts, null); javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc .getSocketFactory()); } static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public boolean isServerTrusted( java.security.cert.X509Certificate[] certs) { return true; } public boolean isClientTrusted( java.security.cert.X509Certificate[] certs) { return true; } public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } } static {try {url = new URL(PATH);} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/* * params 填写的URL的参数 encode 字节编码 */public static void sendPostMessage(String encode) {// 忽略证书try {trustAllHttpsCertificates();} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();} HttpsURLConnection.setDefaultHostnameVerifier(hv); StringBuffer stringBuffer = new StringBuffer();try {HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();httpURLConnection.setConnectTimeout(3000);httpURLConnection.setDoInput(true);// 从服务器获取数据httpURLConnection.setDoOutput(true);// 向服务器写入数据// 获得上传信息的字节大小及长度 JSONObject user = new JSONObject(); user.put("filename", "2.26"); // 设置请求体的类型httpURLConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");httpURLConnection.setRequestProperty("Content-Lenth",String.valueOf(user.toString().length()));// 获得输出流,向服务器输出数据OutputStream outputStream = (OutputStream) httpURLConnection.getOutputStream();outputStream.write(user.toString().getBytes());// 获得服务器响应的结果和状态码int responseCode = httpURLConnection.getResponseCode();if (responseCode == 200) {// 获得输入流,从服务器端获得数据InputStream inputStream = (InputStream) httpURLConnection.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream)); String lines; StringBuffer sb = new StringBuffer(""); while ((lines = reader.readLine()) != null) { lines = new String(lines.getBytes(), "utf-8"); sb.append(lines); } System.out.println(sb); reader.close(); }} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * @param args */public static void main(String[] args) {sendPostMessage("utf-8");}}
启动tomcat,分别运行httpRequest类和httpsRequest类进行测试。
控制台打印出 {"gujian":{"version":"2.27"}} 代表运行成功。
0 0
- 用http和https请求进行访问数据
- Http 和 Https 访问请求
- 发起https和http请求
- android http 和https请求
- IOS-访问HTTP和HTTPS
- http和https访问共存
- haproxy 中的http请求和https请求
- https请求和http请求的转换
- java http请求和https请求
- java发http,https请求获取数据
- HTTP和HTTPS的请求和响应
- http 和 https 的请求区别
- 网络请求之HTTP和HTTPS
- java发送HTTP和HTTPS请求
- java 发送http和https请求
- php curl请求http和https
- JAVA实现http/https的Post、Get、代理访问请求
- tomcat同时支持http和https访问
- 【Operator】【Comcast】有线电视运营商部署LoRa进军物联网
- ActiveRecord模式整理
- debug代码
- android_41_activity生命周期
- FL Studio中如何设置教程
- 用http和https请求进行访问数据
- Win7下U盘安装CentOS-7-x86_64-DVD-1503-01(入门版)
- RealTimeRendering第三版的翻译
- Java程序挂掉的几种可能
- Java ME、Java SE、Java EE区别
- SQL GETDATE()日期格式化函数
- logback冲突导致日志级别失效的解决办法
- angularjs学习之http
- mybatis-generator使用Maven Plugin生成mapper