VirusTotal HTTPS连接Java
问题描述:
我正在寻找解析VirusTotal URL,因此我试图打开连接到特定链接并阅读网页源代码。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)
我试着做一些测试和调整,但我没有管理,使其工作。
我也测试了几个其他网站,它工作得很好。
谢谢。
答
此代码失败,因为没有标头的简单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
非常感谢,只是复制属性使其工作,欣赏它。 –
我试过你的代码,结果也一样。我最好的猜测是,virustotal有一些反机器人逻辑,防止服务器返回数据。我试图添加一个用户代理到请求,但这也没有帮助。不知道此时还有什么可以尝试的,现在对我来说已经很晚了,所以我会多思考一些,如果想到什么,请回复您。 –