Dateiupload mittels HttpClient

Merlin

Mitglied
Hallo Leute,
und schon mal danke fürs durchlesen.

Ich bin grad dabei über den httpClient einen Upload auf eine Website zu programmieren. Dabei bin ich auf zwei unterschiedliche Seitentypen gestoßen. Die einen rufen eine andere .php Seite auf, was ich problemlos mit java simulieren kann, indem ich die Seite mit den nötigen Inputs (mittels PostMethod) aufrufe.

Leider würde ich gern auf eine ganz bestimmte Website (nPage) meine Daten hochladen. Diese Seite gehört zu den Seiten, die ,nachdem der Benutzer auf den Upload Button geklickt hat, ein Javascript mittels onSubmit aufrufen. Wenn ich nun die Website per Programm aufrufe und die nötigen Inputs übergebe, bekomme ich als Antwort zwar, dass der Server die Anfrage bekommen hat, aber sonst ist sie leer. ("Upload complete, response=")

Mein verwendeter java Code:

Java:
        url ="http://upload.npage.de/upload.php";
        PostMethod filePost = new PostMethod(url);
        
        filePost.getParams().setBooleanParameter(
                HttpMethodParams.USE_EXPECT_CONTINUE,
                false); // true, wenn passender header
        
        try {

        	Part[] parts = {new StringPart("submit", "Gewählte Dateien hochladen"), new StringPart("APC_UPLOAD_PROGRESS", "18f1cee7759a5639371e519b9e622061" ), new FilePart("dateien[]", file)};
        	filePost.setRequestEntity(
                    new MultipartRequestEntity(parts, 
                    filePost.getParams())
                    );
            
            HttpClient client = new HttpClient();
            client.getHttpConnectionManager().
                    getParams().setConnectionTimeout(5000);
            
            int status = client.executeMethod(filePost);
            
            if (status == HttpStatus.SC_OK) {
                System.out.println(
                        "Upload complete, response=" + 
                        filePost.getResponseBodyAsString()
                        );
            } else {
            	System.out.println(
                        "Upload failed, response=" + 
                        HttpStatus.getStatusText(status)
                        );
            }
        } catch (Exception ex) {
        	System.out.println("Error: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            filePost.releaseConnection();
        }

Hier der Ausschnitt aus dem Quellcode der Seite, wo ein Druck auf den "Gewählte Dateien hochladen" Button behandelt wird (Das ist auch noch ein Probelm für mich, da dort das ä als wä geschrieben ist und ich nicht weiß, ob ich nun "Gewählte Dateien hochladen" oder "Gewählte Dateien hochladen" übergeben muss. Habe aber beides probiert ...).

HTML:
 <form enctype="multipart/form-data" onSubmit="startProgress('18f1cee7759a5639371e519b9e622061');" target="upload_frame" action="upload.php" method="POST" style="margin:0px;">
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="18f1cee7759a5639371e519b9e622061">
<script language="JavaScript" type="text/javascript">

var num_fields = '1';
var save = '';

function add_field(objid){
	var clone_me = document.getElementById(objid).firstChild.cloneNode(true);
	document.getElementById(objid).appendChild(clone_me);
}

function remove_field(objid){
	var delete_me = document.getElementById(objid).lastChild;
	document.getElementById(objid).removeChild(delete_me);
}

function fields(objid, num) {
	var num_buf = num;

	if (num - num_fields > 0) {
		for (var num; num > num_fields; num--) {
			add_field(objid);
		}

		num2 = num_buf - 1;

		for (var num2; num2 >= num_fields; num2--) {
			document.forms[0].elements[num2+1].value = '';
		}
	}
	else {
		for (var num; num < num_fields; num++) {
			remove_field(objid);
		}
	}

	num_fields = num_buf;
}
</script><table border="0" cellpadding="3" cellspacing="0" class="tabelle1" width="100%"><tr><td align="center" style="text-align: center;"><a href="javascript:fields('uploads', 1);" onfocus="blur(this)">1 Datei</a> | <a href="javascript:fields('uploads', 3);" onfocus="blur(this)">3 Dateien</a> | <a href="javascript:fields('uploads', 5);" onfocus="blur(this)">5 Dateien</a> | <a href="javascript:fields('uploads', 10);" onfocus="blur(this)">10 Dateien</a> | <a href="javascript:fields('uploads', 20);" onfocus="blur(this)">20 Dateien</a></td></tr></table>

<table border="0" cellpadding="3" cellspacing="0" class="tabelle1" width="100%" style="margin-bottom: 0px; padding-bottom: 0px; border-bottom: 0px;"><tr><td colspan="2" class="titel">Formular</td></tr></table><table id="uploads" border="0" cellpadding="3" cellspacing="0" width="100%" class="tabelle1" style="margin-bottom: 0px; padding-bottom: 0px; border-bottom: 0px; border-top: 0px;"><tr><td width="160" nowrap="nowrap"><b>Datei:</b></td><td><input type="file" size="25" name="dateien[]"></td></tr></table><table border="0" cellpadding="3" cellspacing="0" width="100%" id="uploads" class="tabelle1" style="border-top: 0px;"><tr><td width="160">&nbsp;</td><td>&nbsp;<a href="javascript:fields('uploads',(num_fields+1));" onfocus="blur(this)" style="padding-top: 0; margin-top: 0;">Eine weitere Datei hochladen ...</a><br><br><input type="checkbox" class="checkbox" name="compress_now" id="compress_now" value="1" checked> <label for="compress_now">Hochgeladene Bilder automatisch komprimieren (empfohlen)</label></td><tr><td>&nbsp;</td><td><input type="submit" value="Gew&auml;hlte Dateien hochladen" class="form-button"></td></tr></table><input type="hidden" name="act" value="upload">
</form>

Leider bin ich mir inzwischen nicht einmal mehr sicher, ob das überhaupt per HttpClient geht und ich nicht HtmlUnit hernehmen muss ...

Wenn ich bloß dieses onSubmit irgendwie aufrufen könnte ...

Freue mich über jeden Ratschlag!

mfg Merlin
 

kay73

Bekanntes Mitglied
Das, was ich da rauslese ist einmal eine Art UID, mit der JavaScript wahrscheinlich per AJAX den Server während der Uploads abfragt, wieviel schon angekommen ist. Dann noch Code, um im DOM für jede Datei ein Auswahlfeld einzubauen.

Alles in allem solltest Du den JavaScript-Krempel erst mal ignorieren und letztendlich den Traffic mit wireshark mitschneiden. Dann per "Follow TCP-Stream" schauen, was da genau übertragen wird und welche Kennungen die MultiPartForm-Teile haben und wohin der Redirect geht, wenn alles da ist.

Ist diese Bilderseite öffentlich zugänglich?
 

Merlin

Mitglied
Hi,
und danke für die schnelle Antwort.

Leider ist nPage eine Website, wo sich eine Hompage erstellen kann, und deshalb ohne (kostenlose) Registrierung nicht zugänglich.

Von wireshark hatte ich noch nicht gehört, aber ich werde mich im Laufe des Tages damit beschäftigen.

mfg Merlin
 

Merlin

Mitglied
Hi,
Vielen Dank kay73.

Mittels wireshark hab ich, die Post und Get Methode vom Firefox mit dem von meinem Programm verglichen. Dabei bin ich darauf gestoßen, dass Firefox ein Cookie mit übermittelt, dass ich dann durch
Java:
 filePost.setRequestHeader("Cookie", "PHPSESSID=*****");
eingefügt hab.

Daraufhin hat alles geklappt :D.

mfg Merlin
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JavaApplet -> Parameterübergabe an PHP -> Dateiupload zum Server Netzwerkprogrammierung 6
G Jakarta Net Commons - FTPClient: Problem bei Dateiupload Netzwerkprogrammierung 2
C Probleme bei Dateiupload mit socket Netzwerkprogrammierung 4
A TCP multiClientServer mit socket mittels ObjectOutputStream Netzwerkprogrammierung 12
windl AirPlay mittels Java Netzwerkprogrammierung 0
vandread Zugriff auf Soziales Netzwerk mittels Java? Netzwerkprogrammierung 4
M HTTP HTTPS-Verbindung mittels Java und Javascript Netzwerkprogrammierung 2
C SingleSignOn auf Client mittels Windows Credentials Netzwerkprogrammierung 11
S SSH-Connection - Auto-Vervollständigung mittels TAB Netzwerkprogrammierung 4
L Socket publicKey mittels DatagramPacket übertragen Netzwerkprogrammierung 8
R Sicherheit bei entferntem Methodenaufruf mittels RMI Netzwerkprogrammierung 4
M Bestimmung der Netzwerkklasse mittels IP-Adresse Netzwerkprogrammierung 3
P Textdateien aus Oracle-DB mittels Java auslesen und öffnen Netzwerkprogrammierung 7
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
J Antwort eines Soaprequests parsen mittels org.apache.soap Netzwerkprogrammierung 2
R Mittels BufferedReader Objekte lesen? Netzwerkprogrammierung 5
I http:GET mittels Socket liefert selsame Zeichenfolgen. Netzwerkprogrammierung 4
D txt Datei auslesen mittels URL Netzwerkprogrammierung 7
thE_29 Host mittels IP bekommen? Netzwerkprogrammierung 7
D HTTP Apache-HttpClient/UNAVAILABLE (java 1.4) Netzwerkprogrammierung 18
B HttpClient - Server (Jetty) - getInputStream - EOF Netzwerkprogrammierung 3
G apache httpClient Problem. Netzwerkprogrammierung 5
B HttpClient Netzwerkprogrammierung 2
M Apache HTTPClient Server log ausgeben ?! Netzwerkprogrammierung 3
N HTTP Apache 4.2.1 HttpClient 302 nach Login und auf den weiteren Seiten. Netzwerkprogrammierung 5
R Apache HttpClient File Download? Netzwerkprogrammierung 3
M HTTP HTTPClient Authentication - Quickr Server Netzwerkprogrammierung 8
H Java 1.4 HTTPClient Content von PutMethod Netzwerkprogrammierung 4
M need org.apache.commons.httpclient.* Netzwerkprogrammierung 8
K Login via apache httpclient Netzwerkprogrammierung 4
P HttpClient - Daten einer Website "unvollständig" Netzwerkprogrammierung 5
F FileUpload mit commons HttpClient Netzwerkprogrammierung 17
T HTTP Apache Commons HttpClient Bibliothek Netzwerkprogrammierung 2
H HTTP Login mit POSTMethod und httpClient Netzwerkprogrammierung 5
lordcarlos HTTP Apache HttpClient, post und login. Netzwerkprogrammierung 2
B HTTP Probleme mit HttpClient? Netzwerkprogrammierung 2
H Bilder mit HttpClient hochladen Netzwerkprogrammierung 3
T Apache HttpClient & Default Headers Netzwerkprogrammierung 9
T apache HTTPClient einloggen Netzwerkprogrammierung 2
T HttpClient - Senden via Post Netzwerkprogrammierung 12
M httpclient kann sich nicht auf asp.net Seite anmelden Netzwerkprogrammierung 2
Q HTTPS mit Apache HttpClient Netzwerkprogrammierung 4
M Seltsame Fehlermeldung (httpclient) Netzwerkprogrammierung 6
A Jakarta Commons HTTPClient: Mehrere Requests gleichzeitig Netzwerkprogrammierung 2
E HttpClient und return Problem Netzwerkprogrammierung 6
K Bad Request nach Form Login in Jakarta HttpClient Netzwerkprogrammierung 4
J Jakarta HTTPClient Netzwerkprogrammierung 5
D Problem beim holen einer PHP-Seite via HttpClient Netzwerkprogrammierung 19
C HTTPS mit Apache HTTPClient Netzwerkprogrammierung 1
M org.apache.commons.httpclient.HttpClient Netzwerkprogrammierung 3
S mit HttpClient Seiteninhalt lesen Netzwerkprogrammierung 8
P jakarta.HttpClient: Port bei GetMethod angeben Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben