2016-07-25 8 views
0

Ich bin auf der Suche nach einer VirusTotal URL, deshalb versuche ich, eine Verbindung zu dem bestimmten Link zu öffnen und die Webseiten-Quelle zu lesen.VirusTotal HTTPS Verbindung Java

ich diesen Code bin mit

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(); 
      } 
     } 
    } 
} 

aber ich bekomme diese Fehlermeldung

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) 

ich einige Tests und Anpassungen versucht haben zu tun, aber ich schaffe es nicht funktioniert.

Ich habe auch ein paar andere Websites getestet und es hat gut funktioniert.

Vielen Dank.

+0

Ich habe versucht, Ihren Code und ich habe die gleichen Ergebnisse. Meine Vermutung ist, dass Virustotal eine Anti-Roboter-Logik hat, die verhindert, dass der Server die Daten zurückgibt. Ich habe versucht, der Anfrage einen User-Agent hinzuzufügen, aber das hat auch nicht geholfen. Ich bin mir nicht sicher, was ich zu diesem Zeitpunkt noch versuchen sollte, und es ist spät für mich, also werde ich noch etwas darüber nachdenken und zu dir zurückkommen, wenn mir etwas in den Sinn kommt. –

Antwort

1

Dieser Code schlägt fehl, weil eine einfache GET-Anforderung ohne Header von VirusTotal "zurückgewiesen" wird. Versuchen Sie, mehr Informationen wie unten zur Verfügung zu stellen und es wird funktionieren.

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(); 
    } 
} 
+0

Vielen Dank, kopieren Sie einfach die Eigenschaften, damit es funktioniert, schätzen Sie es. –