HTTP Apache 4.2.1 HttpClient 302 nach Login und auf den weiteren Seiten.

Neomatrix433

Mitglied
Hallo erst mal hab mich mal bei euch hier registriert, kurz zu mir dann zu meinem Problem ok.
Ich studiere Medieninformatik und programmiere nicht nur in Java auch in anderen Sprachen aber Java mag ich am liebsten :toll: Und ich bin schon fast in der Luft zerrissen worden wegen nicht exakter Formulierungen bei meinem Post im Anfängerforumbereich. Ja das war mein persönlicher erster Eindruck hier im Forum mal sehen ob es ja vielleicht besser wird wenn man was fragt und nicht wenn man ungenau Antwortet.

Aber jetzt mal zu meinem Problem:

Daten über mein System:

Meine IDE:
Eclipse Java EE IDE for Web Developers.
Version: Juno Release
Build id: 20120606-2254

Mein PC:
CPU: i7-2600K
RAM: 8GB
SSD: 120GB

Ich will mich auf dieser Internetseite: Free advertising! Free classifieds Free classified Ads Free Ads Free Internet advertising Free online advertising Online classifieds mit meinem kleinen Programm einloggen dafür verwende ich die Bib Apache 4.2.1 HttpClient

Habe mich auf einer anderen Seite erfolgreich einloggen können nur auf dieser Seite ist halt kein 302 redirect.

Das ist halt genau mein Problem wie komme ich an die Seite ran auf die ich mit dem 302 umgeleitet werde.

Hier mal das was ich mal so auf die schnelle runter geschrieben habe:
Java:
private void stepsForiNetGaint() {
	httpclientiNetGaint = new DefaultHttpClient();
	httpclientiNetGaint.setRedirectStrategy(new DefaultRedirectStrategy() {
	    @Override
	    public boolean isRedirected(HttpRequest request,
		    HttpResponse response, HttpContext context) {
		boolean isRedirect = false;
		try {
		    isRedirect = super.isRedirected(request, response, context);
		} catch (ProtocolException e) {
		    // TODO Auto-generated catch block
		    e.printStackTrace();
		}
		if (!isRedirect) {
		    int responseCode = response.getStatusLine().getStatusCode();
		    if (responseCode == 301 || responseCode == 302) {
			return true;
		    }
		}
		return false;
	    }
	});
	localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
	String usernameiNetGaint = mainwindow.getBenutzernameINetGaint()
		.getText();
	char[] passwordiNetGaintArray = mainwindow.getPasswordINetGaint()
		.getPassword();
	String passwordiNetGaint = String.valueOf(passwordiNetGaintArray);
	int statusCode = 0;
	// Logindaten erstellen
	List<NameValuePair> params = new ArrayList<NameValuePair>();
	params.add(new BasicNameValuePair("action", "login_post"));
	params.add(new BasicNameValuePair("email", usernameiNetGaint));
	params.add(new BasicNameValuePair("page", "user"));
	params.add(new BasicNameValuePair("password", passwordiNetGaint));
	// Login iNetGaint
	HttpPost postmethod = new HttpPost(INETGAINTLOGIN);
	// postmethod.addHeader("content-type",
	// "application/x-www-form-urlencoded");
	// postmethod
	// .addHeader("User-Agent",
	// "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0");
	try {
	    response = httpclientiNetGaint.execute(postmethod, localContext);
	    System.out.println(response);
	    if (response.getEntity() != null) {
		printSite(response.getEntity());
	    }
	} catch (ClientProtocolException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
}

hier die printSite:
Java:
private void printSite(HttpEntity entity) {
	try {
	    InputStream is = entity.getContent();
	    BufferedReader br = new BufferedReader(new InputStreamReader(is));
	    while ((str = br.readLine()) != null) {
		statusMeldung("" + str);
		System.out.println("" + str);
	    }
	} catch (IllegalStateException e1) {
	    // TODO Auto-generated catch block
	    e1.printStackTrace();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
    }

Ich lande immer wieder auf der Loginseite, habe mit Firebug den post anlalysiert bin aber jetzt am Ende mit meinem Latein.

Wäre super wenn mir einer von euch da mit etwas Quellcode helfen könnte, die API von HttpClient hat mich auch nicht wirklich weiter gebraucht und die Tutorials auf der Seite auch nicht.

Daher hoffe ich jetzt auf euch und eure Hilfe!
 
Ersetze den Teil Deines Codes:
[JAVA=3]
httpclientiNetGaint.setRedirectStrategy(new DefaultRedirectStrategy() {
@Override
public boolean isRedirected(HttpRequest request,
HttpResponse response, HttpContext context) {
boolean isRedirect = false;
try {
isRedirect = super.isRedirected(request, response, context);
} catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (!isRedirect) {
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == 301 || responseCode == 302) {
return true;
}
}
return false;
}
});
[/code]
Durch den hier:
[JAVA=3]
httpclientiNetGaint.setRedirectStrategy(new LaxRedirectStrategy());
[/code]
Das müsste dafür sorgen, dass der HttpClient einem Redirect auch nach einem Post-Request folgt.
 
Hab ich gemacht komme immer nur auf die Loginseite dann muss ja irgendwas mit meinem Login falsch sein. Aber so wie ich die Parameter übergebe ist es doch richtig auch unter HttpClient 4.2.1 oder haben die das da auch geändert.

Es sind im HTML-Code auch die:
HTML:
    <input type="hidden" name="page" value="user" />

    <input type="hidden" name="action" value="login_post" />

Felder die ich auch in der Post mit übergebe, oder verstehe ich das falsch.
Als URI kann ich doch die: "http://www.inetgiant.com/user/login" nehmen und dahin den Post senden oder direkt an die "http://www.inetgiant.com" URI? In Firebug sehe ich das senden an die zweite URI die ich genannt habe.
mit den Parametern die ich auch an den Post hänge. :rtfm:
 
  • Der POST muss an die Url, die im action-Attribut des Formulars steht. Das steht bei dem von Dir genannten Formular auf "/". D.h. es geht direkt auf "http://www.inetgiant.com/"
  • Es müssen alle Input-Elemente als POST-Parameter enthalten sein. Das schließt auch hidden inputs und übrigens auch den Value des Submit-Buttons ein.
  • Ich sehe in Deinem Code zwar, dass Du eine List mit NameValuePairs anlegst, aber ich kann nirgends entdecken, wie Du diese an den HttpPost anhängst. Das geht so:
    Java:
     postmethod.setEntity(new UrlEncodedFormEntity(params));
 
Ja hab ich auch genau so gemacht wie du es geschrieben hast. Aber selbst wenn ich das jetzt so habe:

Java:
private void stepsForiNetGaint() {
	httpclientiNetGaint = new DefaultHttpClient();
	httpclientiNetGaint.setRedirectStrategy(new LaxRedirectStrategy());
	localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
	String usernameiNetGaint = mainwindow.getBenutzernameINetGaint()
		.getText();
	char[] passwordiNetGaintArray = mainwindow.getPasswordINetGaint()
		.getPassword();
	String passwordiNetGaint = String.valueOf(passwordiNetGaintArray);
	// Logindaten erstellen
	List<NameValuePair> params = new ArrayList<NameValuePair>();
	params.add(new BasicNameValuePair("action", "login_post"));
	params.add(new BasicNameValuePair("email", usernameiNetGaint));
	params.add(new BasicNameValuePair("page", "user"));
	params.add(new BasicNameValuePair("password", passwordiNetGaint));
	params.add(new BasicNameValuePair("submit", "Sign in"));
	// Login iNetGaint
	HttpPost postmethod = new HttpPost(INETGAINT);
	try {
	    postmethod.setEntity(new UrlEncodedFormEntity(params));
	    response = httpclientiNetGaint.execute(postmethod, localContext);
	    if (response.getEntity() != null) {
		printSite(response.getEntity());
	    }
	} catch (ClientProtocolException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
}

bekomme ich keine Seite in der Console angezeigt ick bin wirklich mit den Nerven am Ende zweifele langsam an mir selber und meinen Programmierkenntnissen ;(
 

Zurück
Oben