# HttpClient und return Problem



## erZ (23. Jul 2008)

Tag

Ich habe das Forum und Google mal durchwälzt aba ich finde einfach nichts. Folgendes Problem:
Ich habe mittels HttpClient von apache.commons mir jeglich notwendige Bibliotheken runtergeladen.
Nun gibt es ja diverse Seiten wo ein "form" vorhanden ist, sogar mehrere auf einer Seite.
Ich führe den unten geposteten Code aus und alles scheint laut IDE in Ordnung zusein. Doch meinr result, also die output.html zeigt lediglich die Seite so wie Sie ist an, als würde ich wie mit einem Browser darauf gehen und hätte nichts gemacht.


```
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.File;

public class Main {
    
    public static void main(String args[]) {
        
        HttpClient client = new HttpClient();
        client.getParams().setParameter("http.useragent", "Test Client");
        
        BufferedReader br = null;
        
        PostMethod method = new PostMethod("http://www.snapscouts.de");
        method.addParameter("user", "nutzer");
        method.addParameter("pw", "meinPw");
        method.addParameter("xyz","132m2e");
        
        try{
            int returnCode = client.executeMethod(method);
            
            if(returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
                System.err.println("The Post method is not implemented by this URI");
                // still consume the response body
                method.getResponseBodyAsString();
            } else {
                br = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));
                String readLine;
                
                File f = new File("output.html");
                f.createNewFile();
                
                BufferedWriter bw = new BufferedWriter(new FileWriter(f));
                
                while(((readLine = br.readLine()) != null)) {
                    bw.write(readLine);
                }
            }
        } catch (Exception e) {
            System.err.println(e);
        } finally {
            method.releaseConnection();
            if(br != null) try { br.close(); } catch (Exception fe) {}
        }
        
    }
}
```

Das Ding ist ja, auf snapscouts.de dieser Community-Seite gibt es 2 forms mit unterschiedlichen Namen, ich weiss also nicht mal wie ich direkt sowas anspreche. Nächste Frage wäre dann, auf vielen Seiten sind noch zusätzliche Parameter vorhanden wie dieses xyz dort mit dem hidden-value von 132m2e. Wieso bauen die das ein? Und ja meine große hauptsächliche Frage ist, wie ich das nun allgemein Anstelle, dass meine Output.html dann das eingeloggte Resultat erhält.

Gruß erZ


----------



## HoaX (23. Jul 2008)

ohne auf die seite geschaut zu haben behaupte ich mal dass du dich nicht eingelogt hast. sicher dass die url stimmt an die die formulardaten geschickt werden?


----------



## erZ (23. Jul 2008)

Ja genau das sehe ich ebenfalls als Problem. Viele Seiten haben so ne Einstellung, das man nur die Haupt-URL sieht. Bei www.java-forum.org zB siehste ja oben immer schön die php files usw. Andere wiederum zeigen das nicht an. ich weiss also nicht expliziet auf welcher Seite ich bin. Und kein plan wie ich das rausfind.


----------



## musiKk (23. Jul 2008)

Das mit dem hidden Value xyz=132m2e find ich lustig, aber das nur nebenbei.

Musst du nicht eigentlich die Post-Daten an http://www.snapscouts.de/misc/login statt http://www.snapscouts.de schicken?
Und dass du nicht siehst, welche Dateien geoeffnet sind, ist nur guter Stil. Das geht den Endanwender nichts an und brauchen solltest du das auch nicht.


----------



## erZ (24. Jul 2008)

Ja du bist lustig - lass mich mal nicht so im unwissenden. Ich verstehs einfach nicht.

Was mir aus reiner Logik ersichtlich wird, ist, dass ich expliziet solch ein Forumlar angeben müsste. Sind nämlich 2 auf der gleichen Seite, so würde es da zu missverständnisse kommen. Daher meine Frage - wie gebe ich das an. Dann hab ich mal die PostMethode Variable auf die von dir angebene Seite geleitet - da kam das resulat mit einer Größe von 0 Bytes zurück. Also gehts leider nicht. Das Formular leitet es zwar auf diese Seite hin, dennoch funktioniert es so nicht.

Das Problem ist einfach, zu dem Thema POST gibt es nur ansatzweise Tutorials bzw Exambles im Internet und daher kommen auch soviele Threads dem bezüglich zustande.

Gruß erZ


----------



## musiKk (24. Jul 2008)

erZ hat gesagt.:
			
		

> Dann hab ich mal die PostMethode Variable auf die von dir angebene Seite geleitet - da kam das resulat mit einer Größe von 0 Bytes zurück.


Wenn ich das ganze mit Wireshark mitschneide, dann werden Name, Passwort und dieser komische hidden Value an /misc/login geschickt. Als Antwort kommt in der Tat ein Dokument ohne Inhalt, sondern eine Weiterleitung auf (bin dort ja nicht angemeldet) /misc/falschespasswort. Im richtigen Fall, steht dort sicher die richtige Seite. Allerdings musst du dann sicher auch Kekse mitschicken. Die Weiterleitung steht uebrigens im Header-Feld Location.

Das mit den Formularen: Du schickst deine Daten nicht an die Seite, die das Formular enthaelt, sondern an die, die bei _action_ angegeben ist, insofern gibts da keine Verwechselungsgefahr.


----------



## erZ (26. Jul 2008)

geht trotzdem nich


----------

