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:
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 ...).
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
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"> </td><td> <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> </td><td><input type="submit" value="Gewä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