[英]Java trouble getting the requested file from a URL
我目前正在為一個學校項目工作,該項目的目標是與Java建立SSL連接並在網絡瀏覽器中顯示請求的文件。 我目前正掛斷電話,嘗試捕獲請求消息,以便我可以對其進行解析以獲取所請求文件的名稱。
SSL證書是自簽名的,因此Chrome和Internet Explorer都會出現有關“可疑”網站的警告。 但是在那時,我的代碼已經嘗試捕獲請求消息,但是由於遇到NullPointerException而失敗。
我的代碼如下所示:
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(new File(keystore)), keystorepass);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, keypassword);
SSLContext sslcontext = SSLContext.getInstance("TLSv1.2");
sslcontext.init(kmf.getKeyManagers(), null, null);
ServerSocketFactory ssf = sslcontext.getServerSocketFactory();
SSLServerSocket server = (SSLServerSocket)ssf.createServerSocket(65000);
Socket connectionSocket = null;
BufferedReader in = null;
String requestedFile = null;
boolean getRequest = true;
while(getRequest || requestedFile == null)
{
try
{
System.out.println("Web Server: Listening for connection from Web browser");
connectionSocket = server.accept();
System.out.println("Web Server: Connection Established");
in = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
requestedFile = in.readLine();
System.out.println(requestedFile);
getRequest = false;
}
catch(Exception e)
{
connectionSocket.close();
}
if(requestedFile != null)
System.out.println(requestedFile);
//Here is where the NullPointerException occurs
requestedFile = requestedFile.substring(requestedFile.indexOf("GET") + 4,
requestedFile.indexOf("HTTP"));
我做過另一個項目,它僅使用HTTP連接,該項目的目標是完全相同的,兩者之間的唯一區別是使用SSL連接。
HTTP連接請求消息是這樣捕獲的:
in = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
out = new DataOutputStream(connectionSocket.getOutputStream());
String requestedFile;
requestedFile = in.readLine();
while((in.readLine()).length() > 0);
requestedFile = requestedFile.substring(requestedFile.indexOf("GET") + 4, requestedFile.indexOf("HTTP"));
我嘗試將while循環實現到HTTPS項目中,但沒有成功。 我唯一的想法是,由於Chrome和Internet Explorer的安全性直到我說我要繼續訪問該網站之前才發送請求,因此可能無法接收該請求,這使我的代碼無法正常運行。 (只是一個猜測)
我知道這是一個學校項目,這個社區不喜歡為學生解決作業。 因此,在仔細檢查StackOverflow和大量Googling之后,在此處發布是最后的選擇。 如果有人可以向我指出為什么我無法捕獲請求的正確方向,將不勝感激。
要接受證書,請使用javax.net.ssl.TrustManager。
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.