牛骨文教育服务平台(让学习变的简单)
博文笔记

java模拟https请求

创建时间:2015-01-20 投稿人: 浏览次数:8818
最近一个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调用请求
静态块设置证书:
/**
 * 加载证书
 * */
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("
");
	}
	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("
");
	}
	reader.close();
	con.disconnect();
	System.out.println(responseText.toString());
}

其实与http请求差不多,只是多了证书制作部分。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。