Per POST automatisch auf Website einloggen...

  • Themenstarter Themenstarter Oliver001
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
O

Oliver001

Gast
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
***
 
Du öffnest eine ganz normale Socketverbindung mit dem deinem Webserver auf Port 80, schickst ihm eine entsprechende Anfrage und wertest dann seine Anwort aus.
 
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.
 
...das sieht sehr gut aus - ist wahrscheinlich das, was ich suche.

Werd's ausprobieren. 🙂

Einen schönen Tag zusammen.
Oli
 
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:
 
hi,
bin mir nicht ganz sicher,aber man kann auch die beutzerdaten base64 codieren und dann als Authorisierungsdaten mitschicken...
z.b. so:
Code:
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",
""};
 
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:
Code:
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
 
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

Code:
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;
    }

 }
 
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
Code:
URIUtil.encodeQuery(...)
URI-konform verpacken muß.

Bis denne Huck
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben