java https post get请求_Java实现Https发送get和post请求

本文摘自classinstance.cn。

我们工作中经常需要请求第三方或者自己项目中一些接口,有post和get请求,http协议的实现起来很简单,那么https呢?

java中如何实现发送https请求并得到响应数据?

java中带了javax.net.ssl.HttpsURLConnection类,可以实现https请求。

下面直接分享我的工具类HttpUtil类,HttpUtil有两个方法httpsGet(String url)与httpsPost(String url),分别处理https的get和post请求,数据都返回String类型,如果返回的是html可以用jsoup工具解读Dom,如果是json直接用fastJson或其他转Json工具包就可以读取数据了。

直接分享代码吧:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.ConnectException;

import java.net.URL;

import java.net.URLEncoder;

import java.security.KeyManagementException;

import java.security.NoSuchAlgorithmException;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import javax.net.ssl.HttpsURLConnection;

import javax.net.ssl.SSLContext;

import javax.net.ssl.TrustManager;

public class HttpUtil {

/**

* https get请求

* @param url

* @return

*/

public static String httpsGet(String url){

String str_return = "";

HttpsURLConnection conn = null;

try {

SSLContext sc = SSLContext.getInstance("SSL");

sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },

new java.security.SecureRandom());

URL console = new URL(url);

conn = (HttpsURLConnection) console.openConnection();

conn.setSSLSocketFactory(sc.getSocketFactory());

conn.setHostnameVerifier(new TrustAnyHostnameVerifier());

conn.connect();

InputStream is = conn.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is,

("ISO-8859-1")));

String ret = "";

while (ret != null) {

ret = br.readLine();

if (ret != null && !ret.trim().equals("")) {

str_return = str_return

+ new String(ret.getBytes("ISO-8859-1"), "utf-8");

}

}

} catch (ConnectException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (KeyManagementException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

} finally {

conn.disconnect();

}

return str_return;

}

/**

* https Post请求

* @param url

* @return

*/

public static String httpsPost(String url,Map parameters){

String str_return = "";

HttpsURLConnection conn = null;

try {

StringBuffer params = new StringBuffer();

for (Iterator iter = parameters.entrySet().iterator(); iter.hasNext();){

Entry element = (Entry) iter.next();

params.append(element.getKey().toString());

params.append("=");

params.append(URLEncoder.encode(element.getValue().toString(),"utf-8"));

params.append("&");

}

if (params.length() > 0) {

params = params.deleteCharAt(params.length() - 1);

}

SSLContext sc = SSLContext.getInstance("SSL");

sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },

new java.security.SecureRandom());

URL console = new URL(url);

conn = (HttpsURLConnection) console.openConnection();

conn.setRequestMethod("POST");

conn.setSSLSocketFactory(sc.getSocketFactory());

conn.setHostnameVerifier(new TrustAnyHostnameVerifier());

conn.setDoOutput(true);

byte[] b = params.toString().getBytes();

conn.getOutputStream().write(b, 0, b.length);

conn.getOutputStream().flush();

conn.getOutputStream().close();

conn.connect();

InputStream is = conn.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is,

("ISO-8859-1")));

String ret = "";

while (ret != null) {

ret = br.readLine();

if (ret != null && !ret.trim().equals("")) {

str_return = str_return

+ new String(ret.getBytes("ISO-8859-1"), "utf-8");

}

}

} catch (ConnectException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (KeyManagementException e) {

e.printStackTrace();

} finally {

conn.disconnect();

}

return str_return;

}

//测试一下

public static void main(String[] args) throws Exception {

String string = HttpUtil2.httpsGet("https://www.baidu.com");

System.out.println(string);

}

}

其中还需要其他两个类

TrustAnyHostnameVerifier.java

import javax.net.ssl.HostnameVerifier;

import javax.net.ssl.SSLSession;

public class TrustAnyHostnameVerifier implements HostnameVerifier {

public boolean verify(String arg0, SSLSession arg1) {

return true;

}

}

TrustAnyTrustManager.java

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

public class TrustAnyTrustManager implements X509TrustManager {

public void checkClientTrusted(X509Certificate[] arg0, String arg1)

throws CertificateException {

// TODO Auto-generated method stub

}

public void checkServerTrusted(X509Certificate[] arg0, String arg1)

throws CertificateException {

// TODO Auto-generated method stub

}

public X509Certificate[] getAcceptedIssuers() {

return new X509Certificate[] {};

}

}

这三个类直接到工程里就可以用了。

欢迎分享,(木庄网络博客交流QQ群:562366239)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以使用HttpURLConnection或者HttpClient来发送get和post请求到微信接口。以下是示例代码: 使用HttpURLConnection发送get请求: ```java URL url = new URL("https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.connect(); int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); } else { System.out.println("GET request failed, response code: " + responseCode); } ``` 使用HttpURLConnection发送post请求: ```java String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN"; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("POST"); // 设置post请求参数 String urlParameters = "json data..."; con.setDoOutput(true); DataOutputStream wr = new DataOutputStream(con.getOutputStream()); wr.writeBytes(urlParameters); wr.flush(); wr.close(); int responseCode = con.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); } else { System.out.println("POST request failed, response code: " + responseCode); } ``` 使用HttpClient发送get请求: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID"); CloseableHttpResponse response = httpClient.execute(httpGet); try { HttpEntity entity = response.getEntity(); String responseBody = EntityUtils.toString(entity, "UTF-8"); EntityUtils.consume(entity); System.out.println(responseBody); } finally { response.close(); } ``` 使用HttpClient发送post请求: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN"); // 设置post请求参数 StringEntity entity = new StringEntity("json data...", ContentType.APPLICATION_JSON); httpPost.setEntity(entity); CloseableHttpResponse response = httpClient.execute(httpPost); try { HttpEntity responseEntity = response.getEntity(); String responseBody = EntityUtils.toString(responseEntity, "UTF-8"); EntityUtils.consume(responseEntity); System.out.println(responseBody); } finally { response.close(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值