# Proxy Authentifizierung HtmlUnit



## Sunchezz (15. Dez 2010)

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!


----------



## faulelotte (15. Dez 2010)

Rein theoretisch sollte es so gehen, wie auch im HtmlUnit Getting Started beschrieben ist funktionieren.


```
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");
```


----------



## Sunchezz (16. Dez 2010)

würde mich ja freuen wenns so einfach wäre...
aber die Methode "addProxyCredentials("","")" is deprecated!!! -.-


----------



## Sunchezz (16. Dez 2010)

das hier funktioniert immer.... also eine Verbindung zu einem Server ohne Authentifizierung:

```
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^^)!

```
final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) webClient.getCredentialsProvider();
     credentialsProvider.addCredentials("xxxx", "xxxxxx");
     webClient.setProxyConfig(new ProxyConfig("92.241.165.69", 23235, true));
```


----------



## faulelotte (16. Dez 2010)

Authentifizierung per Proxy und Basic Auth auf der Webseite klappt bei mir so:


```
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://..........");
```


----------



## Sunchezz (16. Dez 2010)

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) !


```
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!


----------



## faulelotte (16. Dez 2010)

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.


----------



## Sunchezz (17. Dez 2010)

eine authentifizierung an der website gibt es nicht, denn ich versuche nach dem den einstellungen lediglich zu testzwecken erstmal auf Wie ist meine IP-Adresse? zuzugreifen um dann auch gleich die ip auszulesen!


----------



## Sunchezz (22. Dez 2010)

keiner mehr ne Idee??

verdammt!


----------

