# Per POST automatisch auf Website einloggen...



## Oliver001 (16. Jun 2004)

Wie man Argumente per GET an eine Webside übergibt ist ziemlich trivial.
Doch wie geht dies per POST?

Ziel:
Periodisch auf eine WebSite einloggen (Formular mit Benutzername & Pwd.), die vom WebServer generierte Seite empfangen, parsen und Userinteraktionen automatisch von der JavaApp. ausführen lassen - dann wieder ausloggen.

Dies ist alles kein Problem, bis eben auf die Sache mit dem Einloggen. Wie geschieht dies per POST?

Vielen Dank.
Oli
***


----------



## stev.glasow (16. Jun 2004)

Du öffnest eine ganz normale Socketverbindung mit dem deinem Webserver auf Port 80, schickst ihm eine entsprechende Anfrage und wertest dann seine Anwort aus.


----------



## Oliver001 (16. Jun 2004)

Danke erstmals.
Soweit kann ich Deine Antwort nachvollziehen, allerdings ist es mir nicht klar, wie ich die POST Key-Value Information hinzufüge.

Bei GET is' es ja klar, einfach an die URL anhängen.


----------



## stev.glasow (17. Jun 2004)

Ich habe hier noch eine andere Variante gefunden. Vieleicht hilft dir das mehr.


----------



## Oliver001 (17. Jun 2004)

...das sieht sehr gut aus - ist wahrscheinlich das, was ich suche.

Werd's ausprobieren. 

Einen schönen Tag zusammen.
Oli


----------



## Oliver001 (18. Jun 2004)

Ich bekomme zwar den HTML Code zurück, jedoch ohne erfolgreichen Login.

Bei den Angaben key/value gebe ich als KeyAttribut einfach den Wert des name Attributs des HTML Input Tags an und als value einfach den Benutzernamen, bzw. das pwd.

Ich hab' beide vorgeschlagenen Lösungen probiert, speziell allerdings die erste - ohne Erfolg.



 :cry:


----------



## Freakazoid (18. Jun 2004)

hi,
bin mir nicht ganz sicher,aber man kann auch die beutzerdaten base64 codieren und dann als Authorisierungsdaten mitschicken...
z.b. so:

```
String[] httpnachricht = {
"POST /order.jsp HTTP/1.1",
"Host: www.test.de",
"Content-Length: 49",
"Authorization: Basic U3R1ZDp3aW5m",
"" ,
"kdnr=kn425&kdname=Max+Muster&werbung=BitteWerbung",
""};
```


----------



## harl3kin (7. Sep 2006)

Hallo zusammen,

ich möchte einen Webserver mittels HTTP POST ansprechen. Habe jetzt schon verschiedene Implementierungen versucht, aber die Anfrage scheint nicht so auf dem Server anzukommen wie gedacht. Mein Code sieht momentan so aus:

```
try {
      //Create URLConnection
      URL target = new URL("http://hostname/geoserver/wms");
      URLConnection httpURLConnection = target.openConnection();
      httpURLConnection.setDoOutput(true);
      OutputStreamWriter wr = new OutputStreamWriter(httpURLConnection.getOutputStream());     
      //    Construct data
      String data = URLEncoder.encode("request", "UTF-8") + "=" + URLEncoder.encode("GetCapabilities", "UTF-8");
      wr.write(data);
      wr.flush();
      String response = new String(consumeResponse(httpURLConnection.getInputStream()));
      System.out.println(response);

    }
```

Als response bekomm ich die selbe antwort wie wenn ich in den browser die oben genannte URL eingebe. Es sieht also so aus, als würde der Server den data-Parameter nicht beachten.
Wisst ihr wo da der Fehler sein kann?

Thx,
thorsten


----------



## huckfinn (19. Sep 2006)

Also es gibt eine API in den Apache Jakarta Commons 
..siehe   org.apache.commons.httpclient 
die einem viel Arbeit mit dem Clientkram abnimmt. 
Den Folgenden Code habe ich aus dem Java Servlet und JSP Cookbook von 
Bruce W. Perry ..O'Reilly bzw. von der Apache Seite. Die GET-Methoden habe 
ich getestet und laufen bei mir in einer ClientShell. Der Test der  POST-Methoden
steht noch aus. Ich hoffe es hilft.  

Bis denne Huck


```
package default; 

import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpMethodParams;
import java.io.*;
....
import default.saxparser.ServerResponse;

public class HttpClientTest {

    private HttpClient httpClient = new HttpClient();

    //------------------------------------------------------------------
    // Neue Instanz
    //------------------------------------------------------------------
    public HttpClientTest() {
        httpClient.getHttpConnectionManager().
            getParams().setConnectionTimeout(5000);
    }

    //------------------------------------------------------------------
    //  Alles über eine GET Methode
    //------------------------------------------------------------------
    public ServerResponse requestViaGet(String url) 
      throws SAXException, HttpException, IOException {
        HttpMethod request = new GetMethod(url+"&user=joe&password=bloggs");
        httpClient.executeMethod(request);
        InputStream responseStream = request.getResponseBodyAsStream();
        .......
        ServerResponse result = new ServerResponse();
        result.parse(responseStream);
        return result;
    }

    //------------------------------------------------------------------
    //  Alles über eine Post Methode
    //------------------------------------------------------------------
    public ServerResponse requestViaPost(String url) 
      throws SAXException, HttpException, IOException {
        PostMethod request = new PostMethod(url);
        NameValuePair[] data = {
          new NameValuePair("user", "joe"),
          new NameValuePair("password", "bloggs")
        };

        request.setRequestBody(data);

        httpClient.executeMethod(request);
        InputStream responseStream = request.getResponseBodyAsStream();
        .....
        ServerResponse result = new ServerResponse();
        result.parse(responseStream);
        return result;
    }

 }
```


----------



## huckfinn (20. Sep 2006)

Hi,

Hier der Rest 





			
				huckfinn hat gesagt.:
			
		

> Der Test der POST-Methoden steht noch aus


Der Test der POST-Methode war auch erfolgreich und ist sogar etwas eleganter als GET, weil man die Parameter nicht mit der Methode 
	
	
	
	





```
URIUtil.encodeQuery(...)
```
URI-konform verpacken muß.

Bis denne Huck


----------

