/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Problem med at benytte et HttpClient libra~
Fra : Daniel Jensen


Dato : 24-03-03 11:27

Hejsa... :)

Herunder er der en masse kode... det er mit forsøg på at logge ind på en
side (http://www.hattrick.org/) følgende burde efter min mening poste til
siden og få en login session cookie eller lignende tilbage i hovedet igen...
men det sker bare ikke... håber der er nogen der kender lidt til det library
jeg benytter:
http://jakarta.apache.org/commons/httpclient/

jeg ved ikke om det er min benyttelse af libraryts post classses og methods
der er forkert... for de oplysninger er de samme som den form på login siden
angiver.... håber der er nogen der kan hjælpe mig... :-/

// Daniel Jensen

(Følgende kode i main burde udskrive en forkert login da det user/pass ikke
er korrekt men den gør ingenting overhovedet :-/...)

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpMethodBase;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.HeadMethod;

import java.io.IOException;

public class GetPage {

private static String url = /*"http://ip.ter.dk/";*/
"http://www.hattrick.org/common/default.asp";
private static String startMenuUrl =
"http://www.hattrick.org/Common/menu.asp";
private static String loginUrl = /*"http://ip.ter.dk/";*/
"http://195.149.159.155/Common/default.asp";
private static String checkLogin =
"menu.asp?timeOut=&loginError=&showMenu=login";
private static Cookie cookies[];
private static boolean haveCookie = false;
private static HttpClient client = new HttpClient();

public static void login (String username, String password) {

System.out.println("Udskrevet i starten af login()");
HttpState initialState = new HttpState();

initialState.setCookiePolicy(CookiePolicy.COMPATIBILITY);

System.out.println("Lige før if sætningen: if(!haveCookie)");
if(!haveCookie) {

String headerValueAccept = "image/gif, image/x-xbitmap,
image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword,
application/x-shockwave-flash, */*";

GetMethod get = new GetMethod(url);

System.out.println("Dette er Hvis vi ingen Session Cookie
havde");

get.setFollowRedirects(true);
get.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1)");
get.setRequestHeader("Accept", headerValueAccept);
get.setRequestHeader("Accept-Encoding", "gzip, deflate");
get.setRequestHeader("Accept-Language", "da");
get.setRequestHeader("Connection", "Keep-Alive");

Header[] getRequestHeaders = get.getRequestHeaders();

System.out.println("Request headers i første sidehentning:");
for(int i = 0; i < getRequestHeaders.length; i++) {
System.out.println(i + ": " +
getRequestHeaders[i].toExternalForm());
}

client.setConnectionTimeout(5000);
client.setState(initialState);

try {
client.executeMethod(get);
} catch (IOException e) {
System.out.println("Der skete en fejl i hentningen af
default.asp: " + e.toString());
System.out.println();
e.printStackTrace();
}

Header[] getHeader = get.getResponseHeaders();

System.out.println("Response headers i første sidehentning:");
for(int i = 0; i < getHeader.length; i++) {
System.out.println(i + ": " +
getHeader[i].toExternalForm());
}

cookies = client.getState().getCookies();

System.out.println("Cookies: ");
for (int i = 0; i < cookies.length; i++) {
System.out.println(" - " + cookies[i].toExternalForm());
}

System.out.println();
System.out.println("Indholdet af Siden: ");
System.out.println(get.getResponseBodyAsString());

get.releaseConnection();

if (cookies.length>0) {
haveCookie = true;
} else {
System.out.println("Fik ingen Cookie");
haveCookie = false;
}

}

PostMethod post = new PostMethod(loginUrl);
if(haveCookie) {

NameValuePair[] submitBody = {
new NameValuePair("loginname", username),
new NameValuePair("password", password)
};

post.setRequestBody(submitBody);
post.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1)");
post.setFollowRedirects(true);
client.setConnectionTimeout(30000);
client.setState(initialState);

Header[] postMethodHeader = post.getRequestHeaders();

System.out.println("Post headers vi sender:");
for(int i = 0; i < postMethodHeader.length; i++) {
System.out.println(i + ": " +
postMethodHeader[i].toExternalForm());
}

try {
client.executeMethod(post);
} catch(IOException e) {
e.printStackTrace();
}

Header[] loginInputHeader = post.getResponseHeaders();

System.out.println("LoginHeaders fra Post query: ");
for(int i = 0; i < loginInputHeader.length; i++) {
System.out.println(i + ": " +
loginInputHeader[i].toExternalForm());
}

cookies = client.getState().getCookies();

for (int i = 0; i < cookies.length; i++) {
System.out.println(" - " + cookies[i].toExternalForm());
}

System.out.println("Indholdet af siden: ");
System.out.println(post.getResponseBodyAsString());

post.releaseConnection();

if(cookies.length>1) {
haveCookie = true;
} else {
System.out.println("Havde ikke mere end 1 Cookie");
haveCookie = false;
}

}

PostMethod postMethod = new PostMethod(loginUrl);
if(haveCookie) {

NameValuePair[] submitBody = {
new NameValuePair("loginname", username),
new NameValuePair("password", password)
};

postMethod.setRequestBody(submitBody);
postMethod.setRequestHeader("User-Agent", "Mozilla/4.0
(compatible; MSIE 6.0; Windows NT 5.1)");
postMethod.setFollowRedirects(true);
client.setConnectionTimeout(30000);
client.setState(initialState);

Header[] postHeader = postMethod.getRequestHeaders();

System.out.println("Post headers vi sender:");
for(int i = 0; i < postHeader.length; i++) {
System.out.println(i + ": " +
postHeader[i].toExternalForm());
}

try {
client.executeMethod(postMethod);
} catch(IOException e) {
e.printStackTrace();
}

Header[] loginInputHeader = postMethod.getResponseHeaders();

System.out.println("LoginHeaders fra første login: ");
for(int i = 0; i < loginInputHeader.length; i++) {
System.out.println(i + ": " +
loginInputHeader[i].toExternalForm());
}

cookies = client.getState().getCookies();

for (int i = 0; i < cookies.length; i++) {
System.out.println(" - " + cookies[i].toExternalForm());
}

System.out.println(postMethod.getResponseBodyAsString());

postMethod.releaseConnection();

if(cookies.length>1) {
haveCookie = true;
} else {
System.out.println("Havde ikke mere end 1 Cookie");
haveCookie = false;
}

}


}

public static void get(String url) {

if(cookies.length>1) {

System.out.println("Udskrevet i starten af get(String url)");
HttpState initialState = new HttpState();

initialState.setCookiePolicy(CookiePolicy.COMPATIBILITY);

System.out.println("Lige før if sætningen: if(haveCookie)");
if(haveCookie) {

String headerValueAccept = "image/gif, image/x-xbitmap,
image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword,
application/x-shockwave-flash, */*";

GetMethod get = new GetMethod(url);

System.out.println("Dette er hvis vi havde en cookie");

get.setFollowRedirects(true);
get.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1)");
get.setRequestHeader("Accept", headerValueAccept);
get.setRequestHeader("Accept-Encoding", "gzip, deflate");
get.setRequestHeader("Accept-Language", "da");
get.setRequestHeader("Connection", "Keep-Alive");

Header[] getRequestHeaders = get.getRequestHeaders();

System.out.println("Request headers i method get() sidehentning:
");
for(int i = 0; i < getRequestHeaders.length; i++) {
System.out.println(i + ": " +
getRequestHeaders[i].toExternalForm());
}

client.setConnectionTimeout(5000);
client.setState(initialState);

try {
client.executeMethod(get);
} catch (IOException e) {
System.out.println("Der skete en fejl i hentningen af
default.asp: " + e.toString());
System.out.println();
e.printStackTrace();
}

Header[] getHeader = get.getResponseHeaders();

System.out.println("Response headers i method get()
sidehentning:");
for(int i = 0; i < getHeader.length; i++) {
System.out.println(i + ": " +
getHeader[i].toExternalForm());
}

cookies = client.getState().getCookies();

System.out.println("Cookies: ");
for (int i = 0; i < cookies.length; i++) {
System.out.println(" - " + cookies[i].toExternalForm());
}

System.out.println();
System.out.println("Indholdet af Siden: ");
System.out.println(get.getResponseBodyAsString());

get.releaseConnection();

if (cookies.length>0) {
haveCookie = true;
} else {
System.out.println("Fik ingen Cookie");
haveCookie = false;
}


}


}
}

public static void main(String[] args) throws Exception {
GetPage get = new GetPage();
get.login("m00m000", "m0000000000000000");

get.get("http://195.149.159.155/Common/menu.asp?timeOut=&loginError=&showMen
u=login");

}

}



 
 
Morten (24-03-2003)
Kommentar
Fra : Morten


Dato : 24-03-03 15:01

Hej. Hvad mener du med at der ingenting sker? Kan du uddybe lidt
nærmere, evt. isolere et bedre eksempel? Det du har postet virker fint
så vidt jeg kan se,
jeg kørte det tidligere og der kom en masse HTML output. Lige nu
kommer der
connection refused.

Mvh Morten

Daniel Jensen (24-03-2003)
Kommentar
Fra : Daniel Jensen


Dato : 24-03-03 20:49

Ja det er sandt men problemet ligger i de cookies... se på det sidste HTML
der bliver udskrevet i konsollen... det er hvad der sker når man får et
session timeout... jeg prøver at hente menu.asp hvilket giver session
timeout selvom den sender cookien med tilbage...

--

// Daniel Jensen - Newbie/fritids programmør
Fatter hat men prøver anyway :-I
junk@daniboy.dk

"Morten" <usenet@kikobu.com> skrev i en meddelelse
news:75db36f2.0303240600.42ab4e22@posting.google.com...
> Hej. Hvad mener du med at der ingenting sker? Kan du uddybe lidt
> nærmere, evt. isolere et bedre eksempel? Det du har postet virker fint
> så vidt jeg kan se,
> jeg kørte det tidligere og der kom en masse HTML output. Lige nu
> kommer der
> connection refused.
>
> Mvh Morten



Soren Davidsen (25-03-2003)
Kommentar
Fra : Soren Davidsen


Dato : 25-03-03 07:06

"Daniel Jensen" <junk@daniboy.dk> writes:

> Ja det er sandt men problemet ligger i de cookies... se på det sidste HTML
> der bliver udskrevet i konsollen... det er hvad der sker når man får et
> session timeout... jeg prøver at hente menu.asp hvilket giver session
> timeout selvom den sender cookien med tilbage...

Nogen ting jeg lige bemaerkede i din kode:

Du faar to cookies. Du kan ikke 'genbruge' cookies mellem domaener,
dvs. hvis du proever at lave en session paa 195.194... saa kan den ikke
ogsaa bruges for www.hattrick.org (hvis den blev, ville httpclient
ikke opfoere sig ordentligt anyway).

Jeg hackede lidt i din kode og fik den til ikke at vise timeout:
http://turtle.math.klte.hu/~flower/GetPage.java

(Det vigtigste er at jeg har gjort dine statiske variable instans
variable, og fjernet det meste af koden i din login() metode).


Mvh,

--
___
Soren Davidsen / o\
Math student, ICSMA (_____)
__ http://www.tanesha.net/ _________________________________(___)_______

Daniel Jensen (01-04-2003)
Kommentar
Fra : Daniel Jensen


Dato : 01-04-03 18:37

Jeg siger enormt mange gange tak... vil lige se forskellen mellen den
"hackede" og min egen kode for at se hvad det er jeg gør forkert... men det
med domænerne lyder meget fornuftigt...

Bemærk nedenstående ;)

--

// Daniel Jensen - Newbie/fritids programmør
Fatter hat men prøver anyway :-I
junk@daniboy.dk

"Soren Davidsen" <soren-usenet200303@tanesha.net> skrev i en meddelelse
news:87wuiodlq0.fsf@tanesha.net...
> "Daniel Jensen" <junk@daniboy.dk> writes:
>
> > Ja det er sandt men problemet ligger i de cookies... se på det sidste
HTML
> > der bliver udskrevet i konsollen... det er hvad der sker når man får et
> > session timeout... jeg prøver at hente menu.asp hvilket giver session
> > timeout selvom den sender cookien med tilbage...
>
> Nogen ting jeg lige bemaerkede i din kode:
>
> Du faar to cookies. Du kan ikke 'genbruge' cookies mellem domaener,
> dvs. hvis du proever at lave en session paa 195.194... saa kan den ikke
> ogsaa bruges for www.hattrick.org (hvis den blev, ville httpclient
> ikke opfoere sig ordentligt anyway).
>
> Jeg hackede lidt i din kode og fik den til ikke at vise timeout:
> http://turtle.math.klte.hu/~flower/GetPage.java
>
> (Det vigtigste er at jeg har gjort dine statiske variable instans
> variable, og fjernet det meste af koden i din login() metode).
>
>
> Mvh,
>
> --
> ___
> Soren Davidsen / o\
> Math student, ICSMA (_____)
> __ http://www.tanesha.net/ _________________________________(___)_______



Søg
Reklame
Statistik
Spørgsmål : 177491
Tips : 31966
Nyheder : 719565
Indlæg : 6408455
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste