Hier ist schon mal ein bischen Source-Code.
Das Projekt hat 2 Klassen und 2 Konfigurationsdateien:
Die überhaupt nicht objektorientierte Klasse "FirstTest" baut sich zunächst einen HTTP Get Request zusammen.
Dieser enthält:
- die URL des Requests.
- den HTTP-Parameter action=recent (damit geht er gegen die: die neuesten 10 Posting Seite von atnotes.
- das Cookie, das atnotes zum einloggen benötigt (YaBBSE140usernamev14). Ihr findet diesen Wert in eurem Browser. Ganz praktisch ist in Mozilla Web Developer-plugin: Information: View Cookie Information.
Httpclient sendet den Request.
Atnotes erhält diesen Request und schickt die Seite der 10 neuesten Postings das von httpClient gesendete Cookie und ein neues php-session Cookie zurück.
Die Werte der Cookies sowie ein http Statuscheck werden per log4j an der Konsole ausgegeben.
Der HttpStream der zurückgelieferten Seite wird in eine Datei gespeichert (namens atnotes.de in <projekt-root>/genFiles.
Im Quellcode steht eindeutig das Hallo, Marinero Atlántico. Also hat die Authentifizierung mit dem Cookie geklappt. Wenn jemand anders das ausprobiert, sieht er natürlich nicht Hallo Marinero Atlántico sondern seinen eigenen Namen.
Klasse 1:
package de.aja.commons.dabbling;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.log4j.Logger;
import de.aja.dabbling.commons.utils.DabblingHelpers;
/*
* Created on 05.06.2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author Axel
*
* simply dabbling with jakarta httpClient
*/
public class FirstTest {
final static Logger logger = Logger
.getLogger(de.aja.commons.dabbling.FirstTest.class);
/** requested base url without Query String */
private String urlToRequest;
/** an instance of apache jarkarta HttpClient. */
private HttpClient client;
protected void setUrlToRequest(String urlToRequest) {
this.urlToRequest = urlToRequest;
}
FirstTest() {
client = new HttpClient();
}
/**
* here's where the action takes place.
*
*/
void doGetRequest() {
logger.info("doGetRequest start.");
DabblingHelpers.setStartTime();
HttpMethod method = new GetMethod(urlToRequest);
// name value pair für HTTP-GET
NameValuePair nvp1 = new NameValuePair("action", "recent");
method.setQueryString(new NameValuePair[] { nvp1 });
// user spezifischer Wert aus properties File lesen
Properties props = new Properties();
InputStream iStr = getClass().getClassLoader().getResourceAsStream(
"config.properties");
try {
props.load(iStr);
} catch (IOException e1) {
logger
.error(
"Properties File \"config.properties\" konnte nicht geladen werden",
e1);
System.exit(0);
} catch (NullPointerException npe) {
logger
.error(
"Properties File \"config.properties\" konnte nicht gefunden werden.",
npe);
System.exit(0);
}
// folgende für Cookie setzen:
Cookie cookie = new Cookie("217.160.137.156", "YaBBSE140usernamev14",
props.getProperty("user.cookie.YaBBSE140usernamev14"), "/", -1,
false);
HttpState initialState = new HttpState();
initialState.addCookie(cookie);
initialState.setCookiePolicy(CookiePolicy.COMPATIBILITY);
client.setState(initialState);
try {
int statusCode = client.executeMethod(method);
logger.info("Query String>>>=" + method.getQueryString());
logger
.info("Status Text>>>"
+ HttpStatus.getStatusText(statusCode));
// cookie stuff
logger.info("Start Cookies------------------>");
Cookie[] cookies = client.getState().getCookies();
for (int i = 0; i < cookies.length; i++) {
logger.info("A Cookie");
logger.info("Name=" + cookies[i].getName());
logger.info("Value=" + cookies[i].getValue());
logger.info("Domain=" + cookies[i].getDomain());
}
logger.info("End Cookie<------------------");
// System.out.println(method.getResponseBodyAsString());
InputStream is = new BufferedInputStream(method
.getResponseBodyAsStream());
// byte [] res = method.getResponseBody();
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("genFiles\\atnotes.de"));
// fos.write(is);
byte[] buf = new byte[4096];
int len;
while ((len = is.read(buf)) > 0) {
bos.write(buf, 0, len);
}
bos.close();
is.close();
method.releaseConnection();
method = null;
} catch (IOException e) {
logger.error(e);
} catch (Throwable t) {
logger.error(t);
}
finally {
if (method != null) {
logger
.debug("connection of object \"method\" closed in finally!");
method.releaseConnection();
}
}
logger.info("doGetRequest end. This method took more or less:"
+ DabblingHelpers.getTimeDifInSeconds() + " seconds to run.");
}
public static void main(String[] args) {
FirstTest fTest = new FirstTest();
fTest.setUrlToRequest("http://www.atnotes.de/index.php");
fTest.doGetRequest();
}
}
Globale Helper-Klasse. Zur Zeit nur zum Zeitstoppen:
/*
* Created on 05.06.2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package de.aja.dabbling.commons.utils;
/**
* @author Axel
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class DabblingHelpers {
private static long startTime;
public static void setStartTime() {
startTime = System.currentTimeMillis();
}
public static double getTimeDifInSeconds() {
if (startTime == 0) {
throw new RuntimeException("startTime not set");
}
return System.currentTimeMillis() / 1000;
}
}
1 Konfigurationsdatei für log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-4r [%t.%L] %-5p %c %x.%M - %m%n"/>
</layout>
</appender>
<appender name="pooMonkey" class="org.apache.log4j.FileAppender">
<param name="File" value="C:\\funLogs\\PooMonkey.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-4r [%t.%L] %-5p %c %x.%M - %m%n"/>
</layout>
</appender>
<logger name="de">
<level value="info"/>
<appender-ref ref="STDOUT"/>
</logger>
</log4j:configuration>
1 Properties Datei config.properties
user.cookie.YaBBSE140usernamev14=a%3A3%3Avonmirgeändert