Avatar billede rina Nybegynder
16. februar 2005 - 10:35 Der er 9 kommentarer og
1 løsning

java.net.UnknownHostException

Hej

Jeg prøver at lave en HttpConnection (via jakarta commens) og det virker fint, med alm. adresser, men så snart jeg prøver til en https (ssl) får jeg en java.net.UnknownHostException fejl.
Er der nogle som har en ide om hvad det kan skyldes?

Jeg bruger:
-java 1.4.2.xx
-hhv HttpClient og logging jar filer downloaded fra: http://jakarta.apache.org/site/binindex.cgi

Nedenfor er et lille kode eksempel, der virker fint med http kald, men kaster den omtalte fejl ved https kald:

import org.apache.commons.httpclient.HttpConnection;
import org.apache.commons.httpclient.HttpState;
import java.security.Security;

public class HttpClientEksampel {

    public HttpClientEksampel() {
        System.setErr(System.out);
        // add the provider
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        // set the property
        System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
    }

    public void sendPOSTRequest(String proxyIP, int proxyPort, String destIP, int destPort, boolean useHttps) {
        HttpConnection httpsCon = null;
        try {
            if (useHttps && proxyIP == null) {
                httpsCon = new HttpConnection(destIP, destPort, useHttps);
            } else if (proxyIP != null) {
                httpsCon = new HttpConnection(proxyIP, proxyPort, destIP, destPort, useHttps);
            } else {
                httpsCon = new HttpConnection(destIP, destPort);
            }
            httpsCon.open();

            org.apache.commons.httpclient.methods.GetMethod postMethod = new org.apache.commons.httpclient.methods.GetMethod();
            HttpState https = new HttpState();
            postMethod.setFollowRedirects(true);
            postMethod.execute(https, httpsCon);
            System.out.println(postMethod.getStatusText());
            System.out.println(postMethod.getResponseBodyAsString());
        } catch (Throwable t) {
            System.out.println(" Exception:" + t.getMessage());
            t.printStackTrace();
        } finally {
            if (httpsCon != null && httpsCon.isOpen())
                httpsCon.close();
        }
    }

    public static void main(String[] args) {
        HttpClientEksampel httpClientEksampel = new HttpClientEksampel();
        httpClientEksampel.sendPOSTRequest(null,-1,"www.jp.dk", 80, false); //virker
        httpClientEksampel.sendPOSTRequest(null,-1,"netbank.danskebank.dk/html/index.html?site=DBNB", 443, true); //virker ikke
    }
}
Avatar billede arne_v Ekspert
16. februar 2005 - 10:43 #1
Virker:

httpClientEksampel.sendPOSTRequest(null,-1,"netbank.danskebank.dk", 443, true);

?

(altså med et "rent" hostnavn)
Avatar billede casualty Nybegynder
16. februar 2005 - 10:43 #2
Kunne det ikke være fordi at https ikke kører på port 80?
Avatar billede casualty Nybegynder
16. februar 2005 - 10:44 #3
Ok jeg overså en linie i din kode ;)
Avatar billede arne_v Ekspert
16. februar 2005 - 10:45 #4
Og /html/index.html?site=DBNB skal så proppes ind i Method inden den executes
Avatar billede riversen Nybegynder
16. februar 2005 - 10:45 #5
har du prøvet med HttpsConnection istedet for HttpConnection
Avatar billede arne_v Ekspert
16. februar 2005 - 10:48 #6
Der er ikke en HttpsConnection i Jakarta Commons HttpClient så vidt jeg kan se
Avatar billede rina Nybegynder
16. februar 2005 - 11:15 #7
Hej Arne

jo, den rene url virker (begge nedenstående eksempler virker), men jeg er nød til at bruge en "ikke ren" url :-)
httpClientEksampel.sendPOSTRequest(null,-1,"www.danskebank.dk", 443, true);
httpClientEksampel.sendPOSTRequest(null,-1,"netbank.danskebank.dk", 443, true);

Jeg kan ikke umiddelbart finde en metode hvor jeg kan komme "/html/index.html?site=DBNB" ind i... har du set en sådan idet eksempel?
(Jeg kan godt huske din fra i går, men det var til at sende parameter med, så jeg regner ikke med man kan bruge den til at medsende "undermapper"... men jeg prøver da lige efter jeg har sendt dette...

Du har ret i der ikke er en httpsConnection i det modul jeg har fundet... Efter hvad jeg kan se, er det den constructor man bruger der sætter typen af connection.
Avatar billede arne_v Ekspert
16. februar 2005 - 11:22 #8
GetMethod klassen har en setPath metode !
Avatar billede rina Nybegynder
16. februar 2005 - 11:46 #9
Hej Arne

Det virker med den :-) (pokkers, jeg ikke selv så den *S*)
Sender du et svar så du kan få pointene.
Og Mange tak for hjælpen endnu engang.

/Karina
Avatar billede arne_v Ekspert
16. februar 2005 - 11:48 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester