Proxy Authentifizierung HtmlUnit

Sunchezz

Bekanntes Mitglied
Halli Hallo

ich nutze in meinem Programm die HtmlUnit, und soweit ich (größtenteils durch die Exceptions) mitbekommen habe, nutzt dieses Framework die org.apache API.

Mein Ziel ist es mich an einem Proxyserver zu authentifizieren, in der HtmlUnit scheint es dafür keine direkten Methoden zu geben, allerdings weiß ich, das der org.apache.http.client.HttpClient das zu können scheint, zumindest gibt es dazu auch einige Anleitungen.

Nun komme ich allerdings (durch den WebClient von HtmlUnit) nicht an diesen HttpClient heran, jedenfalls wie es scheint.
Ich habe schon ewig beide APIs durchsucht.
Bin aber bis jetzt einfach nicht fündig geworden!

Das habe ich bisher versucht (ob ich es auch richtig versucht habe ist eine andere Frage xD )
-> webClient.setCredentials(AuthScope blbala...bla)
-> System.propertieis.setproxyHost... bla (obwohl mir diese methode sowieso unrecht wäre weil dadurch, wenn ich das richtig
verstanden hab, dem ganzen system der proxy zugewiesen wird)
-> und noch einiges mehr in den letzen Wochen was ich leider nicht mehr weiß!

hier mal der Link zum HttpClient von org.apache
DefaultHttpClient (HttpClient 4.0.3 API)

hier der zum WebClient von HtmlUnit (was das einzige Objekt ist das ich erstelle)
WebClient (HtmlUnit 2.8 API)


Bin langsam echt am verzweifeln!
Würde mich freuen wenn mir da jemand weiterhilft!
 
Rein theoretisch sollte es so gehen, wie auch im HtmlUnit Getting Started beschrieben ist funktionieren.

Java:
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2, "http://myproxyserver", myProxyPort);

//set proxy username and password 
final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider();
credentialsProvider.addProxyCredentials("username", "password");
 
das hier funktioniert immer.... also eine Verbindung zu einem Server ohne Authentifizierung:
Code:
    try {
       ProxyConfig conf = new ProxyConfig("84.162.138.177", 61519, true);
       webClient.setProxyConfig(conf);
     } catch (Exception e) {
       e.printStackTrace();
     }

Das hier endet letztendlich in einer "SOCKS: authentification failed" SocketException, allerdings erst wenn ich versuche auf eine andere Interneteite zuzugreifen (naja, irgendwie logisch^^)!
Code:
     final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider();
     credentialsProvider.addCredentials("xxxx", "xxxxxx");
     webClient.setProxyConfig(new ProxyConfig("92.241.165.69", 23235, true));
 
Authentifizierung per Proxy und Basic Auth auf der Webseite klappt bei mir so:

Java:
        final WebClient webClient = new WebClient();

        String proxyHost = "proxyHost";
        int proxyPort = 8080;

        ProxyConfig pc = new ProxyConfig(proxyHost, proxyPort, false);
        webClient.setProxyConfig(pc);

        final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider();
        //set proxy username and password
        credentialsProvider.addCredentials("XXXXX", "XXXXXX", proxyHost, proxyPort, null);

        //set website username and password
        credentialsProvider.addCredentials("xxxxx", "xxxxxx");

        final HtmlPage page = webClient.getPage("http://..........");
 
ok, vielleicht hab ich vergessen zu erwähnen das es bei mir um einen SOCKS 5 proxy geht^^
das scheint der knackpunkt bei der ganzen geschichte zu sein -.-

habe jetzt den Code von Getting Started 1:1 kopiert, mit dem zusatz setSocksProxy(true) !

Code:
   public static void homePage_proxy() throws Exception {
      final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3, "92.241.165.69", 23235);
      webClient.getProxyConfig().setSocksProxy(true);

      //set proxy username and password
      final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider();
      credentialsProvider.addCredentials("xxxx", "xxxxxxxo");

      final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");
      //assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText());

      webClient.closeAllWindows();
    }
EDIT: Sorry, BB-Code vergessen!

ach ja, und ich habe keine normale URL, aber das sollte doch eigentlich kein Hinderniss sein oder?

Jedenfalls tut sich immer noch nichts!
 
Klappt die Authentifizierung am Proxy selbst nicht oder an der Webseite die du über de Proxy aufrufst ?

Wie man unter SocksSocketFactory xref sieht, wird ein "Standard" java.net.Socket erzeugt und der beherrscht beide Protokollarten(Socks 4 u. 5) mindestens seit JDK 1.5.
HtmlUnit sendet den ersten Request Versuch möglicherweise ohne Authentifizierung und erwartet eine 401 o. 407 Response um den dann mit dem Auth Header zu beantworten.
 
Zuletzt bearbeitet:

Zurück
Oben