Ist es möglich, für eine Website, die URL beginnend mit "http://" über das HTTPS-Protokoll
Ich habe eine Website, deren URL beginnt mit "http://", aber das ist mir eine Ausnahme mit der Meldung - nicht Unterstützte Protokoll: https. Ist es möglich, dass die Website über das HTTPS-Protokoll noch die URL beginnend mit "http://" und nicht "https://".
public ActionForward executeAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
ActionForward forward = mapping.findForward(Constants.SUCCESS);
String link = "http://abc.fgh.jkl.mno";
URL thisURL;
HttpURLConnection conn = null;
try {
thisURL = new URL(link);
conn = (HttpURLConnection) thisURL.openConnection();
System.out.println(conn.getResponseCode());
System.out.println(conn.getResponseMessage());
} catch (Exception ex) {
ex.printStackTrace();
}
return forward;
}
Stack-trace
java.net.ProtocolException: Unsupported protocol: https'
at weblogic.net.http.HttpClient.openServer(HttpClient.java:342)
at weblogic.net.http.HttpClient.New(HttpClient.java:238)
at weblogic.net.http.HttpURLConnection.connect(HttpURLConnection.java:172)
at weblogic.net.http.HttpURLConnection.followRedirect(HttpURLConnection.java:643)
at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:422)
at weblogic.net.http.SOAPHttpURLConnection.getInputStream(SOAPHttpURLConnection.java:36)
at weblogic.net.http.HttpURLConnection.getResponseCode(HttpURLConnection.java:947)
at com.cingular.cscape.da.struts.action.thisAction.executeAction(thisAction.java:56)
at com.cingular.cscape.da.struts.action.BaseAction.execute(BaseAction.java:300)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at org.extremecomponents.table.filter.AbstractExportFilter.doFilter(AbstractExportFilter.java:53)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3496)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
- Die Seite selbst geladen werden konnte über
http
aber verlangen Ressourcen (Skripte, Bilder, etc.) überhttps
, die möglicherweise geben Sie auch diesen Fehler. - Wie kann ich bekommen, um diesen Fehler - Sollte ich eine HTTPSURLCONNECTION statt . Derzeit bin ich mit HTTPURLCONNECTION.
- Ich weiß wirklich nicht, was Sie tun, versuchen, zu erreichen, etc. Die Frage ist sehr leicht auf die tatsächlichen details.
- Ich werde versuchen, die http-status-code von der Website mit dem folgenden code - String link = "abc.def.ghi.jkl"; URL thisURL; HttpURLConnection conn = null; thisURL = new URL(link); conn = (HttpURLConnection) thisURL.openConnection(); System.aus.println(conn.getResponseCode()); // erste Ausnahme in diesem line-System.aus.println(conn.getResponseMessage()); Können Sie bitte helfen?
- sollten Sie dies zu Ihrer Frage, wie zusätzliche info, viel einfacher zu Lesen
- Ich habe es auf meine Frage. Danke.
- Es könnte sein, dass eine Umleitung auch. Schlage vor, Sie verwenden Sie fiddler, um festzustellen, was eigentlich Los ist mit der Verbindung.
- Ich weiß nicht viel über fiddler. Können Sie bitte erläutern?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie bemerkt, die unübertroffene Apostroph in die Ausnahmemeldung?
Update: wie es aussieht hat dieser Apostroph ist nur eine Laune, wie der WebLogic-HttpClient druckt diese Ausnahme.
Fragesteller root-problem identifiziert wurde in einer chat-Sitzung: er ist ein Zugriff auf http://- URL, wird er auf eine https://- URL. Den webserver an, die https-Adresse dient, ein Zertifikat, dass seine JRE/HttpClient nicht Vertrauen.
Die eigentliche exception sollte eine SSLKeyException. Ich denke, dass der WebLogic-HttpClient ist Fehlmeldungen dieses problem als ein nicht unterstütztes Protokoll Problem. Ich denke, die Kernfrage ist:
<Warning> <Security> <BEA-090477> javax.net.ssl.SSLKeyException: [Security:090477] Certificate chain received from www.X.com - nnn.nnn.nnn.nnn was not trusted causing SSL handshake failure.
Dies ist die Nachricht, dass der Fragesteller sieht beim Zugriff auf die https://- URL direkt (statt über eine redirect-Kette).
Durch Standard-Java-Http[s]URLConnection folgt Umleitungen automatisch und leise. Wenn Sie neugierig sind, wo Sie umgeleitet werden, zu versuchen, diesen code:
Beachten Sie, dass die URL, die Sie umgeleitet zu können auch leiten Sie woanders und auf und auf, bis zu http.maxRedirects Zeiten. Umleitungen können "Kette" auf diese Weise. Wenn Sie die Kette, die Sie benötigen, um zu halten die folgenden Umleitungen, bis Sie eine URL, die nicht ausgestellt werden, eine Umleitung. Das ist, wo die URL-Verbindung irgendwann schließt, wenn
setInstanceFollowRedirects(true)
.Also, ich fand einige Codes in der Sonne.net.www.Protokoll.http.HttpURLConnection, die scheint zu zeigen, dass HttpURLConnection kann keine Unterstützung für den Wechsel-Protokolle (HTTP -> HTTPS) als Teil der automatischen redirect folgende Logik:
WebLogic hat seine eigene (unterschiedliche) Umsetzung von HttpURLConnection, aber es können ähnliche Logik zu verhindern-Protokoll Umschalten. Also, auch wenn der Fragesteller löst seine certificate trust Fragen, er kann noch immer nicht in der Lage sein zu verwenden HttpURLConnection automatisch Folgen einer redirect-Kette, die geht von HTTP zu HTTPS. Ein workaround wäre, die Nutzung
setInstanceFollowRedirects(false)
- und follow redirects manuell. Oder Zugriff auf die HTTPS-site direkt.HTTP ist ein Protokoll, das auf TCP/IP. HTTPS ist HTTP über secure socket (SSL oder neuere Version TLS). Nun, was ist eine URL? Es ist eine Zeichenfolge zur Identifizierung einer Ressource, und sieht in etwa wie:
Beachten Sie, dass manchmal wir don ' T geben Sie die port-Nummer, weil einige protcols verknüpft bekannt port-Nummer. Für HTTP ist 80 und für HTTPS ist 443, also können diese zahlen implizit sind. Beachten Sie jedoch, dass Sie können binden Sie Ihre server socket auf welchem port Sie wollen: wenn Sie sagen, Sie Ihre HTTP-server-Programm zu binden, seinen socket an den port 8273 auf localhost, wird es gerne tun.
Sagte, dass in Ihrem Fall die Meldung "nicht unterstütztes Protokoll: https". Wir können nur raten hier, aber ich denke, dass der string, den Sie übergeben, um die URL ist nicht die, die Sie denken.
Andere Möglichkeit ist die HTTP-Adresse antwortet mit einem 3xx redirect-response auf eine HTTPS-URL, die Ihr Kunde versucht zu Folgen, wird aber nicht unterstützt.
Sie können sehr durch die Erfassung der Netzwerkverkehr mit tcpdump oder wireshark.
Es gibt so viele Java-HTTP-client-Bibliotheken, die Unterstützung von HTTPS, warum nicht wechseln Sie zu einem von denen?