VirusTotal HTTPS连接Java

时间:2016-07-25 03:49:51

标签: java https

我希望解析一个VirusTotal URL,因此我正在尝试打开与特定链接的连接并阅读网页源。

我正在使用此代码

package boot;

import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.cert.Certificate;
import java.io.*;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLPeerUnverifiedException;

public class Run {
    public static void main(String[] args) {
        new Run().testIt();
    }
    private void testIt() {
        String https_url = "https://www.virustotal.com/en/file/7b6b268cbca9d421aabba5f08533d3dcaba50e0f7887b07ef2bd66bf218b35ff/analysis/";
        URL url;
        try{
            url = new URL(https_url);
            HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
            // dumpl all cert info
            print_https_cert(con);
            System.out.println(con);
            // dump all the content
            print_content(con);
        } catch(MalformedURLException e){
            e.printStackTrace();
        } catch(IOException e){
            e.printStackTrace();
        }
    }
    private void print_https_cert(HttpsURLConnection con) {
        if(con != null){
            try{
                System.out.println(con);
                System.out.println("Response Code : " + con.getResponseCode());
                System.out.println("Cipher Suite : " + con.getCipherSuite());
                System.out.println("\n");
                Certificate[] certs = con.getServerCertificates();
                for(Certificate cert : certs){
                    System.out.println("Cert Type : " + cert.getType());
                    System.out.println("Cert Hash Code : " + cert.hashCode());
                    System.out.println("Cert Public Key Algorithm : " + cert.getPublicKey().getAlgorithm());
                    System.out.println("Cert Public Key Format : " + cert.getPublicKey().getFormat());
                    System.out.println("\n");
                }
            } catch(SSLPeerUnverifiedException e){
                e.printStackTrace();
            } catch(IOException e){
                e.printStackTrace();
            }
        }
    }
    private void print_content(HttpsURLConnection con) {
        if(con != null){
            try{
                System.out.println("****** Content of the URL ********");
                BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String input;
                while((input = br.readLine()) != null){
                    System.out.println(input);
                }
                br.close();
            } catch(IOException e){
                e.printStackTrace();
            }
        }
    }
} 

但我收到此错误

Response Code : 200
Exception in thread "main" java.lang.IllegalStateException: connection not yet open
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getCipherSuite(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getCipherSuite(Unknown Source)
    at boot.Run.print_https_cert(Run.java:38)
    at boot.Run.testIt(Run.java:23)
    at boot.Run.main(Run.java:13)

我已经尝试过进行一些测试和调整,但我没有设法让它发挥作用。

我还测试了其他几个网站,它运作得很好。

谢谢。

1 个答案:

答案 0 :(得分:1)

此代码失败,因为没有标题的简单GET请求被拒绝"通过VirusTotal。尝试提供如下所示的更多信息,它将起作用。

    private void testIt() {
    String https_url = "https://www.virustotal.com/en/file/7b6b268cbca9d421aabba5f08533d3dcaba50e0f7887b07ef2bd66bf218b35ff/analysis/";        
    URL url;
    try{
        url = new URL(https_url);
        HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
        con.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
        con.setRequestProperty("accept-language", "en-US,en;q=0.8");
        con.setRequestProperty("accept", "text/html");
        //May need to use connect() if connection is not established
        //con.connect();

        // dumpl all cert info
        print_https_cert(con);
        System.out.println(con);
        // dump all the content
        print_content(con);
    } catch(MalformedURLException e){
        e.printStackTrace();
    } catch(IOException e){
        e.printStackTrace();
    }
}