2016-07-25 18 views
0

VirusTotal URLを解析するために、特定のリンクへの接続を開き、Webページのソースを読み込もうとしています。VirusTotal HTTPS接続Java

私はこのコード

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) 

このエラーを取得する私はいくつかのテストや調整をやってみましたが、私はそれを動作させるために管理していませんでした。

私は他のいくつかのウェブサイトもテストしましたが、うまくいきました。

ありがとうございます。

+0

私はあなたのコードを試しましたが、私は同じ結果があります。私の推測では、virustotalにはサーバがデータを返すのを防ぐ場所にアンチロボットロジックがいくつかあるということです。私は、リクエストにUser-Agentを追加しようとしましたが、それも役に立たなかった。この時点で何を試してみるべきか分かりません。私にとっては遅れていますので、何か考えてみましょう。 –

答えて

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

ありがとう、ちょうどそれがうまくいったプロパティをコピーして、それを感謝します。 –