2016-04-16 22 views
2

私のnoobの質問には申し訳ありませんが、私は自分のWebサービスからの私のデータベースに関するJSONの情報を取得するには、このコードを持っている:HttpsへのHttp GETメソッド?

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へ、どうすればいいですか?

これは、TLS 1.1と1.2を有効にするために、私のTLSSocketFactoryです:

私のPOSTメソッドで
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; 
} 
} 

私はTLSSocket工場のインスタンスを作成し、このように私のPOSTメソッドに適用される:

TLSSocketFactory tlsSocketFactory = new TLSSocketFactory(); 
     HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 
     conn.setSSLSocketFactory(tlsSocketFactory); 

しかし、私の質問は.. 私は私のGETメソッドのために同じことをすることができますか?

私を助けてくれてありがとう!あなたのurl所定の使用のためのあなたのTLSSocketFactoryを設定するには

答えて

1

それはHTTPSのURLであると仮定すると、あなたが使用することができるかもしれない:

HttpsURLConnection conn = (HttpsURLConnection) new URL(url).openConnection(); 
conn.setSSLSocketFactory(tlsSocketFactory); 

あなたがPOSTPUTなどのために行うと全く同じ。必要に応じて

conn.setRequestMethod("GET"); 

または"POST"または"PUT":明示的にこのconnGETを使用したいという状態に。その後:

conn.connect(); 
InputStream is = conn.getInputStream(); 

とそのInputStreamからあなたのJSONデータを読み込みます。

希望すると便利です。

関連する問題