首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Https方法到Https?

Https方法到Https?
EN

Stack Overflow用户
提问于 2016-04-16 01:48:29
回答 1查看 125关注 0票数 2

很抱歉问了我这个问题,但是我有以下代码可以从我的web服务中获取关于我的数据库的JSON信息:

代码语言:javascript
复制
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
    InputStream is = new URL(url).openStream();
    try  {
        BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
        String jsonText = readAll(rd);
        return new JSONObject(jsonText);
    } finally {
        is.close();
    }
}

private static String readAll(Reader rd) throws IOException {
    StringBuilder sb = new StringBuilder();
    int cp;
    while ((cp = rd.read()) != -1) {
        sb.append((char) cp);
    }
    return sb.toString();
}

我刚刚买了一个SSL证书,我必须把我的GET方法代码从HTTP传递到HTTPS,我怎么做呢?

这是我的TLSSocketFactory来启用TLS 1.1和1.2:

代码语言:javascript
复制
public class TLSSocketFactory extends SSLSocketFactory {

private SSLSocketFactory internalSSLSocketFactory;

public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException {
    SSLContext context = SSLContext.getInstance("TLS");
    context.init(null, null, null);
    internalSSLSocketFactory = context.getSocketFactory();
}

@Override
public String[] getDefaultCipherSuites() {
    return internalSSLSocketFactory.getDefaultCipherSuites();
}

@Override
public String[] getSupportedCipherSuites() {
    return internalSSLSocketFactory.getSupportedCipherSuites();
}

@Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose));
}

@Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
}

@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort));
}

@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
}

@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort));
}

private Socket enableTLSOnSocket(Socket socket) {
    if(socket != null && (socket instanceof SSLSocket)) {
        ((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});
    }
    return socket;
}
}

使用POST方法,我创建了一个TLSSocket工厂的实例,并将其应用于POST方法,如下所示:

代码语言:javascript
复制
TLSSocketFactory tlsSocketFactory = new TLSSocketFactory();
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setSSLSocketFactory(tlsSocketFactory);

但是我的问题是..。我怎样才能为我的GET方法做同样的事情呢?

谢谢你帮我!

EN

回答 1

Stack Overflow用户

发布于 2016-04-16 16:33:51

若要将TLSSocketFactory设置为给定url,假设它是HTTPS,则可以使用:

代码语言:javascript
复制
HttpsURLConnection conn = (HttpsURLConnection) new URL(url).openConnection();
conn.setSSLSocketFactory(tlsSocketFactory);

正如您对POSTPUT等所做的一样,要显式地声明希望此conn使用GET

代码语言:javascript
复制
conn.setRequestMethod("GET");

或者根据需要使用"POST""PUT"。然后:

代码语言:javascript
复制
conn.connect();
InputStream is = conn.getInputStream();

并从InputStream中读取JSON数据。

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36659290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档