java模拟https请求
来源:互联网 发布:如何打击网络犯罪 编辑:程序博客网 时间:2024/06/04 17:47
最近一个APP要用到云存储,比较了几个云空间后,最后选择了Bmob(http://www.bmob.cn/),Bmob功能不少,还提供各种API,免费。
由于我的APP较小,业务也简单,所以直接用Bmob提供的Rest API。
Bmob的Rest API是https协议的,所以我的想法是:先导出Bmob的证书,用java的keyTool工具制成证书库(keystore),再用HttpsURLConnection与Bmob服务器沟通。
下面为具体步骤:
1:导出证书
用IE的证书工具可以将网站的证书导出。打开网页,查看网页的属性页,属性页右下角可以找到证书,最后将证书【复制到文件】。
由于Java的keyTool工具不能导入P7B格式的证书,所以在导入向导中,我选择Base64编码的CER证书:
最终得到证书文件:
2:创建证书库并导入证书
用java的keyTool工具,执行下列命令,得到bmob.keystore证书库文件:
--生成证书库文件
keytool -genkey -alias bmob.keystore -keyalg RSA -validity 100000 -keystore bmob.keystore
--导入Der/Cer证书
keytool -import -file bmob.cer -keystore bmob.keystore
注:将bmob.cer文件导入证书库时,最好与证书库同一目录
3:java调用请求
静态块设置证书:
POST方式:
GET方式:
其实与http请求差不多,只是多了证书制作部分。
由于我的APP较小,业务也简单,所以直接用Bmob提供的Rest API。
Bmob的Rest API是https协议的,所以我的想法是:先导出Bmob的证书,用java的keyTool工具制成证书库(keystore),再用HttpsURLConnection与Bmob服务器沟通。
下面为具体步骤:
1:导出证书
用IE的证书工具可以将网站的证书导出。打开网页,查看网页的属性页,属性页右下角可以找到证书,最后将证书【复制到文件】。
由于Java的keyTool工具不能导入P7B格式的证书,所以在导入向导中,我选择Base64编码的CER证书:
最终得到证书文件:
2:创建证书库并导入证书
用java的keyTool工具,执行下列命令,得到bmob.keystore证书库文件:
--生成证书库文件
keytool -genkey -alias bmob.keystore -keyalg RSA -validity 100000 -keystore bmob.keystore
--导入Der/Cer证书
keytool -import -file bmob.cer -keystore bmob.keystore
注:将bmob.cer文件导入证书库时,最好与证书库同一目录
3:java调用请求
静态块设置证书:
/** * 加载证书 * */static {System.setProperty("javax.net.ssl.trustStore", "C:\\bmob.keystore");System.setProperty("javax.net.ssl.trustStorePassword", "password");}
POST方式:
/** * 添加例子 * @see <a href='http://docs.bmob.cn/restful/developdoc/index.html?menukey=develop_doc&key=develop_restful#index_添加数据'>例子</a> * */public static void add() throws Exception {//构建请求URL postUrl = new URL(ADD_URL);HttpsURLConnection con = (HttpsURLConnection) postUrl.openConnection();//打开连接 con.setRequestMethod("POST");//post方式提交con.setDoOutput(true);//打开读写属性,默认均为false con.setDoInput(true);con.setUseCaches(false);//Post请求不能使用缓存 con.setInstanceFollowRedirects(true);//添加头信息con.setRequestProperty("X-Bmob-Application-Id", APP_ID);con.setRequestProperty("X-Bmob-REST-API-Key", API_Key);con.setRequestProperty("Content-Type", "application/json");DataOutputStream out = new DataOutputStream(con.getOutputStream());//发送请求String data = "{\"name\":\"tom\"}";out.writeBytes(data);out.flush();out.close();//接收数据BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));String line;StringBuffer responseText = new StringBuffer();while ((line = reader.readLine()) != null) {responseText.append(line).append("\r\n");}reader.close();con.disconnect();System.out.println(responseText.toString());}
GET方式:
/** * 查询数据例子 * @see <a target=_blank href="http://docs.bmob.cn/restful/developdoc/index.html?menukey=develop_doc&key=develop_restful#index_查询数据">例子</a> * */public static void select() throws Exception {//构建请求URL postUrl = new URL(SELECT_URL);HttpsURLConnection con = (HttpsURLConnection) postUrl.openConnection();//打开连接 con.setRequestMethod("GET");//get方式提交con.setDoInput(true);con.setInstanceFollowRedirects(true);//添加头信息con.setRequestProperty("X-Bmob-Application-Id", APP_ID);con.setRequestProperty("X-Bmob-REST-API-Key", API_Key);con.setRequestProperty("Content-Type", "application/json");//接收数据BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));String line;StringBuffer responseText = new StringBuffer();while ((line = reader.readLine()) != null) {responseText.append(line).append("\r\n");}reader.close();con.disconnect();System.out.println(responseText.toString());}
其实与http请求差不多,只是多了证书制作部分。
1 1
- java模拟https请求
- java模拟https请求
- java模拟https请求
- java 通过Httpclient模拟https Post 请求,实现双向认证
- php curl模拟https请求
- fiddler抓取https请求和jmeter模拟https请求
- Java https请求 HttpsURLConnection
- java 实现https请求
- java 实现https请求
- java Https的请求
- java 发送 https请求
- java 实现https请求
- Java https请求 HttpsURLConnection
- JAVA请求HTTPS协议
- java访问https请求
- java发送https请求
- JAVA请求HTTPS协议
- java 实现https请求
- cocos2dx 内存管理 防止遗忘
- Just for Today
- C# Dictionary 的几种遍历方法
- A Box Full Of Kisses
- unity之血瓶的生成
- java模拟https请求
- Tactics for Job-hunt Success
- Eyes can speak
- [C++]LeetCode: 114 Permutation Sequence(返回第k个阶乘序列——寻找数学规律)
- UVa 136 Ugly Numbers(优先队列)
- python实现进制转换
- A Forever Friend
- 基础MySQL语句
- 大数相乘