如何从java执行https GET请求

我写了一个java客户端,它执行http GET请求没有任何问题。 现在我想按顺序修改这个客户端

import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; private String executeGet(final String url, String proxy, int port) throws IOException, RequestUnsuccesfulException, InvalidParameterException { CloseableHttpClient httpclient = null; String ret = ""; RequestConfig config; try { String hostname = extractHostname(url); logger.info("Hostname {}", hostname); HttpHost target = new HttpHost(hostname, 80, null); HttpHost myProxy = new HttpHost(proxy, port, "http"); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( AuthScope.ANY, new UsernamePasswordCredentials(USERNAME, PASSWORD)); httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); config = RequestConfig.custom().setProxy(myProxy).build(); HttpGet request = new HttpGet(url); request.setConfig(config); CloseableHttpResponse response = httpclient.execute(target, request); ... 

现在我必须发送https GET请求而不是https 。 我期待像HttpsGet而不是HttpGet这样的简单修改,但不是,没有可用的HttpsGet类。

修改此方法以处理https请求的最简单方法是什么。

我开发了一个解决方案,看起来比这里发布的更容易

 private String executeGet(final String https_url, final String proxyName, final int port) { String ret = ""; URL url; try { HttpsURLConnection con; url = new URL(https_url); if (proxyName.isEmpty()) { con = (HttpsURLConnection) url.openConnection(); } else { Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyName, port)); con = (HttpsURLConnection) url.openConnection(proxy); Authenticator authenticator = new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { return (new PasswordAuthentication(USERNAME, PASSWORD.toCharArray())); } }; Authenticator.setDefault(authenticator); } ret = getContent(con); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ret; } 

这是我在Java中快速而又脏的https客户端,忽略无效证书并使用BASIC进行身份validation

 import java.io.IOException; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; public static HttpsURLConnection getConnection(boolean ignoreInvalidCertificate, String user, String pass, HttpRequestMethod httpRequestMethod, URL url) throws KeyManagementException, NoSuchAlgorithmException, IOException{ SSLContext ctx = SSLContext.getInstance("TLS"); if (ignoreInvalidCertificate){ ctx.init(null, new TrustManager[] { new InvalidCertificateTrustManager() }, null); } SSLContext.setDefault(ctx); String authStr = user+":"+pass; String authEncoded = Base64.encodeBytes(authStr.getBytes()); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setDoOutput(true); connection.setRequestProperty("Authorization", "Basic " + authEncoded); if (ignoreInvalidCertificate){ connection.setHostnameVerifier(new InvalidCertificateHostVerifier()); } return connection; } 

 import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLSession; public class InvalidCertificateHostVerifier implements HostnameVerifier{ @Override public boolean verify(String paramString, SSLSession paramSSLSession) { return true; } } 

 import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; /** * ignore invalid Https certificate from OPAM * 

see http://javaskeleton.blogspot.com.br/2011/01/avoiding-sunsecurityvalidatorvalidatore.html */ public class InvalidCertificateTrustManager implements X509TrustManager{ @Override public X509Certificate[] getAcceptedIssuers() { return null; } @Override public void checkServerTrusted(X509Certificate[] paramArrayOfX509Certificate, String paramString) throws CertificateException { } @Override public void checkClientTrusted(X509Certificate[] paramArrayOfX509Certificate, String paramString) throws CertificateException { } }

也许这是你可以开始的事情。

当然,由于您有连接,因此可以使用检索响应内容

 InputStream content = (InputStream) connection.getInputStream();