2017-10-18 93 views
-1

我想在遠程服務器上實現一個SMS電話號碼驗證程序。下面的方法是通過一個Servlet叫,我試圖連接到SMS服務提供商,以便他們可以發送短信到指定的電話號碼:如何解決來自HttpURLConnection的java.net.UnknownHostException

public static int sendPhoneNumberVerication(User user) throws SQLException, IOException, IllegalArgumentException, ClassNotFoundException 
{ 
    String email = user.getEmail(); 
    String phoneNumber = user.getPhoneNumber(); 
    String verificationCode = getVerificationCode(email); 
    String message = getPhoneVerificationMessage(user, verificationCode); 
    //The sending SMS part 
    String address = "https://www.bulksmsnigeria.com/api/v1/sms/create?api_token=fHTGT6PiRxIE1ZrMvOTDcsu0cM5yiQKz2EnWAXxQqkMt6UlAUHwHGIBFxQW4&from=Matonia&to=" + phoneNumber + "&body=" + message; 
    URL url = new URL(address); 
    //URL url = new URL("https", "www.bulksmsnigeria.com", 80, "/api/v1/sms/create?api_token=fHTGT6PiRxIE1ZrMvOTDcsu0cM5yiQKz2EnWAXxQqkMt6UlAUHwHGIBFxQW4&from=Matonia&to=" + phoneNumber + "&body=" + message); 
    HttpURLConnection urlConn = (HttpURLConnection)url.openConnection(); 
    urlConn.setRequestMethod("POST"); 
    try(InputStream inputStream = urlConn.getInputStream())//<- Exception is throw here 
    { 
     byte[] bytes = new byte[inputStream.available()]; 
     inputStream.read(bytes); 
     String content = new String(bytes); 
     //Get the HTTP response status code 
     int statusCode = urlConn.getResponseCode(); 
     return statusCode; 
    } 
} 

當執行servlet中,我得到了以下異常:

java.net.UnknownHostException: www. 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
at java.net.Socket.connect(Socket.java:589) 
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:649) 
at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173) 
at sun.net.NetworkClient.doConnect(NetworkClient.java:180) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) 
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:275) 
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371) 
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) 
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1103) 
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:997) 
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) 
at sun.net.www.protocol.http.HttpURLConnection.followRedirect0(HttpURLConnection.java:2645) 
at sun.net.www.protocol.http.HttpURLConnection.followRedirect(HttpURLConnection.java:2574) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1768) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
at com.peer2peer.users.UserDAO.sendPhoneNumberVerication(UserDAO.java:406) 
at com.peer2peer.users.UpdateProfileServlet.sendPhoneValidation(UpdateProfileServlet.java:261) 
at com.peer2peer.users.UpdateProfileServlet.processRequest(UpdateProfileServlet.java:52) 
at com.peer2peer.users.UpdateProfileServlet.doGet(UpdateProfileServlet.java:333) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
at ... 

當我嘗試使用下面的代碼實例網址:

URL url = new URL("https", "www.bulksmsnigeria.com", 80, "/api/v1/sms/create?api_token=fHTGT6PiRxIE1ZrMvOTDcsu0cM5yiQKz2EnWAXxQqkMt6UlAUHwHGIBFxQW4&from=Matonia&to=" + phoneNumber + "&body=" + message); 

我得到javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

如果我將https更改爲http,則會獲得301作爲狀態碼。 但是,如果我在網絡瀏覽器上運行URL地址我得到這個: enter image description here

...我也收到了預期的短信!

我也檢查了here,herehere,我似乎沒有從這些帖子中得到任何東西。 我不知道我在這裏做錯了什麼。 請幫忙。

回答

-1

您網站的HTTP純文本版本發出無效重定向至www.。當您使用HTTPS時,它會提前失敗,因爲您連接到HTTPS的錯誤端口。

+0

對不起,我不明白這一點,請你能詳細點嗎? – Jevison7x

+0

異常消息非常清楚。 'java.net.UnknownHostException:www.'的哪部分你不明白? – EJP

+0

@EJP除非發佈的代碼與運行的代碼不匹配,否則URL包含完整的地址,只是'www'的螺母。 –

0

這是因爲HTTPS不使用80端口。它使用端口443,請嘗試以下操作:

URL url = new URL("https", "www.bulksmsnigeria.com", 443, 
    "/api/v1/sms/create?api_token=fHTGT6PiRxIE1ZrMvOTDcsu0cM5yiQKz2EnWAXxQqkMt6UlAUHwHGIBFxQW4&from=Matonia&to=" + phoneNumber + "&body=" + message; 
+0

讓我試試看...... – Jevison7x

+0

我仍然在'java.net.UnknownHostException:www.' – Jevison7x

+0

你確定服務器連接到互聯網嗎?您可以嘗試使用其他網址(例如,「https:// www.google.com」)嗎? –

相關問題