您的位置:首页 > 理论基础 > 计算机网络

java post方式传递数据的两种方式(http https)

2017-08-22 16:53 288 查看
采用哪种方式传递数据,主要取决于目标地址是否有ssl协议。即前缀是http还是https


1.http方式



字段解析:

1.url:表示要传递到的目标地址 String类型

2.byte[] parameter :表示要传递的数据。String.getBytes()可以得到该类型

//重载 http方法。
public static String httpPost (String url, byte[] parameter) {
return httpPost(url, parameter, null);
}

public static String httpPost (String url, byte[] parameter, String base64) {

//定义stringbuffer  方便后面读取网页返回字节流信息时的字符串拼接
StringBuffer buffer = new StringBuffer();

//创建url_connection
java.net.URLConnection http_url_connection = null;
try {
http_url_connection = (new java.net.URL(url)).openConnection();
http_url_connection.setDoInput(true);
http_url_connection.setDoOutput(true);
//http_url_connection.setRequestMethod("POST");
http_url_connection.setRequestProperty("Content-Length", String.valueOf(parameter.length));
http_url_connection.setRequestProperty("Content-Type", "application/json");
http_url_connection.setUseCaches(false);

if (null!=base64) {
//如果传入的参数不为空,则通过base64将传入参数解码
http_url_connection.setRequestProperty("Authorization", "Basic "+new String(java.util.Base64.getEncoder().encode(base64.getBytes("utf-8")), "utf-8"));
}

// write request.
java.io.BufferedOutputStream output_stream = new java.io.BufferedOutputStream(http_url_connection.getOutputStream());
output_stream.write(parameter);
output_stream.flush();
output_stream.close();
output_stream = null;

java.io.InputStreamReader input_stream_reader = new java.io.InputStreamReader(http_url_connection.getInputStream(), "utf-8");
java.io.BufferedReader buffered_reader = new java.io.BufferedReader(input_stream_reader);
buffer = new StringBuffer();
String line;
while ((line = buffered_reader.readLine()) != null) {
buffer.append(line);
}

line=null;
input_stream_reader.close();
input_stream_reader = null;
buffered_reader.close();
buffered_reader = null;
//  http_url_connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}

return buffer.toString();
}


2.https的方式

字段意思和上面的一样。

其中第三个是”application/json” 即 传递数据的格式。

第四个则表示的是,传递数据的认证方式。一般都是
null
或者
""


public static String httpsPost (String url, byte[] parameter, String content_type, String base64) {
StringBuffer buffer = new StringBuffer();

// 声明SSL上下文
javax.net.ssl.SSLContext ssl_context = null;
try {
ssl_context = javax.net.ssl.SSLContext.getInstance("SSL");
ssl_context.init(null, new javax.net.ssl.TrustManager[]{
new javax.net.ssl.X509TrustManager() {
@Override
public void checkClientTrusted (java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {
}
@Override
public void checkServerTrusted (java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
}, null);
} catch (Exception e) {
e.printStackTrace();
}
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(ssl_context.getSocketFactory());

// 实例化主机名验证接口
javax.net.ssl.HostnameVerifier hostname_verifier = new javax.net.ssl.HostnameVerifier(){
@Override
public boolean verify(String hostname, javax.net.ssl.SSLSession session) {
return true;
}
};
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(hostname_verifier);

javax.net.ssl.HttpsURLConnection http_url_connection = null;
try {
//              System.out.println("url"+url);
http_url_connection = (javax.net.ssl.HttpsURLConnection)(new java.net.URL(url)).openConnection();
http_url_connection.setDoInput(true);
http_url_connection.setDoOutput(true);
http_url_connection.setRequestMethod("POST");
http_url_connection.setRequestProperty("Content-Length", String.valueOf(parameter.length));
http_url_connection.setRequestProperty("Content-Type", content_type);
http_url_connection.setUseCaches(false);
if (null!=base64) {
http_url_connection.setRequestProperty("Authorization", "Basic "+new String(java.util.Base64.getEncoder().encode(base64.getBytes("utf-8")), "utf-8"));
}

// write request.
java.io.BufferedOutputStream output_stream = new java.io.BufferedOutputStream(http_url_connection.getOutputStream());
output_stream.write(parameter);
output_stream.flush();
output_stream.close();
output_stream = null;

java.io.InputStreamReader input_stream_reader = new java.io.InputStreamReader(http_url_connection.getInputStream(), "utf-8");
java.io.BufferedReader buffered_reader = new java.io.BufferedReader(input_stream_reader);
buffer = new StringBuffer();
String line;
while ((line = buffered_reader.readLine()) != null) {
buffer.append(line);
}
line=null;
input_stream_reader.close();
input_stream_reader = null;
buffered_reader.close();
buffered_reader = null;
http_url_connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}

return buffer.toString();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐