Datei mit Anhang via http "hochladen"

HarryR

Mitglied
Hallo,

ich möchte eine Datei auf einen Webserver hochladen.
Vom "Hersteller" der Webseite gab es ein curl-Beispielscript, das leidlich funktioniert.
Ich programmiere meine Anwendung aber in Java (sonst wäre ich nicht hier, oder :)
Meine bisherigen Versuche in Jav enden immer in einem 401-Fehler.

Vielleicht könnt ihr mir helfen !?
Zuerst mal ein paar Infos zum Programierstand in Java:

[CODE lang="java" title="Imports"]import org.apache.http.Header;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.*;

import org.apache.http.HttpEntity;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.AuthenticationException;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.FileEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;[/CODE]

Ich zeige auch gerne Abschnitte des Codes, aber .. der ist relativ kompliziert, daher vesrschone ich euch erst mal damit

und zeige euch lieber mal das was ich via wireshark an Infos habe.
Das erklärt das Problem vielleicht auch besser.

[CODE lang="html" title="python-Client (funktionierend)"]Hypertext Transfer Protocol
PUT /api/sensor/upgrade?usr=XXXX&passwd=YYYYY HTTP/1.1\r\n
[Expert Info (Chat/Sequence): PUT /api/some/call?usr=XXXXn&passwd=YYYY HTTP/1.1\r\n]
[PUT /api/some/call?usr=XXXX&passwd=YYYY HTTP/1.1\r\n]
[Severity level: Chat]
[Group: Sequence]
Request Method: PUT
Request URI: /api/some/call?usr=XXXX&passwd=YYYY
Request URI Path: /api/some/call
Request URI Query: usr=XXX&passwd=YYY
Request URI Query Parameter: usr=XXX
Request URI Query Parameter: passwd=YYYY
Request Version: HTTP/1.1
Host: 10.130.31.25\r\n
User-Agent: curl/7.58.0\r\n
Accept: */*\r\n
Content-Length: 21597945\r\n
[Content length: 21597945]
Expect: 100-continue\r\n
\r\n
[Full request URI: http://10.130.31.25/api/some/call?usr=XXX&passwd=YYYY]
[HTTP request 1/1]
[Response in frame: 16970]
File Data: 21597945 bytes
Data (21597945 bytes)
Data: 504b03040a00000800005545894eb2d6ae87b7020000b702...
[Length: 21597945]
[/CODE]

Der Aufruf dazu ist:
Java:
curl --no-proxy ""  -ss  -T DATEI "http://IP/api/some/call?$usr=XXX&passwd=YYYY"

So sollte es dann auch aussehen, wenn ich es mit den obigen imports und dem "richtigen" Java-Code
hinbekomme.

Das komische ist. Wenn ich meine Java-Versuche mit wireshark mitsniffe gibt es noch nicht einmal
ein http in der Protokoll-Spalte .. das wird nur als TCP "dekodiert" ..
Irgendetwas mache ich falsch.

Vielen Dank und Grüße
bleibt gesund
Harry
 

HarryR

Mitglied
Ohne den Code zu sehen kann man schlecht sagen, wo der Fehler im Code ist :)
Da hast du recht, aber der Code ist so aufwendig (hmm, vielleicht das falsche Wort), bis ich den auf
das gekürzt habe was interessant wäre ..

Ich hoffe eher auf ein kleines "Tutorial" mit ein paar Zeilen Code wie "ihr" es machen würdet.

Grüßle Harry
 

Oneixee5

Top Contributor
Der HTTP-Statuscode 401 Unauthorized gibt an, dass der Server die Anfrage aufgrund fehlender oder ungültiger Authentifizierung abgelehnt hat.
 

HarryR

Mitglied
Der HTTP-Statuscode 401 Unauthorized gibt an, dass der Server die Anfrage aufgrund fehlender oder ungültiger Authentifizierung abgelehnt hat.
Stimmt, aber irgendwie auch nicht, ich glaube das ist eine Fakeantwort des Servers, weil er mit etwas anderem nicht zufrieden ist.
Ist kein normaler Webserver von der Stange (zb kein apache).
Die Authentifizierung bekommt schon den richtigen User/Pw, es wird sogar die Datei gesendet, aber halt nicht so, wie der Webserver es gerne hätte. Das Problem ist irgendwie, dass der binäre Inhalt NICHT als MultiPart gesendet werden soll (das geht schief) , sondern als ich nenne es mal "SinglePart". Auch nicht als FormData. Daher habe ich ja den curl-Ausschnitt gezeigt, ich dachte da erkennt man (ihr), was zu tun ist, damit genau dieses Format auch von Java (bzw den Bibliotheken) erzeugt wird. Ich zitiere mal aus der Spezifikation des Herstellers (gekürzt):

[CODE lang="java" title="Spezifikation"]upgrade Sends an upgrade / plugin ..... Checks file-extension before returning. Protokoll: PUT Auth: ADMIN/passwd[/CODE]

Das ist leider nicht viel Info, dazu gab es noch das Beispielscript (curl .. siehe oben).

Viele Grüße
 

HarryR

Mitglied
In der Softwareentwicklung etwas zu glauben ist Irrsinn! Es ist wichtig zu wissen was los ist. Softwareentwicklung ist ja keine Kirche.
Offensichtlich versuchst du auch Username und Passwort als Parameter in der URL mitzuschicken - für jeden lesbar!?
Das ist eine Antwort die mich wirklich weiter bringt ...
hilft es dir, wenn ich glauben durch vermuten ersetze ?
Ich habe diese API nicht entwickelt ich muss nur mit ihr arbeiten.
 

mihe7

Top Contributor
@HarryR, Dein erster Post lässt sich zusammenfassen als: "Ich verwende den Apache HTTP Client, hier ein paar Infos wie der Datenstrom im funktionierenden Python-Programm aussieht, wo liegt der Fehler in meinem Java-Code?"

Versteh mich nicht falsch, die gegebenen Infos können durchaus nützlich sein, nur fehlt das Wesentliche:
Ohne den Code zu sehen kann man schlecht sagen, wo der Fehler im Code ist :)
 

HarryR

Mitglied
So, ich habe mal den Code aus einer längeren "generalistischen" Methode extrahiert (Die Methode macht wesentlich mehr, aber das ist hier nicht von Belang).

[CODE lang="java" title="Stripped Code"]RequestConfig rConfig = RequestConfig.custom()
.setConnectTimeout(TIMEOUT_CONNECT * MILLISECS)
.setConnectionRequestTimeout(TIMEOUT_REQUEST * MILLISECS)
.setSocketTimeout(TIMEOUT_SOCKET * 1000).build();

HttpRequestBase method = null;;
CloseableHttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(rConfig).build();

method = new HttpPut(urlStr);break;
method.setHeader("Accept-Encoding","*/*");
method.setHeader("Content-Type","application/zip");
// in byteArrayList.getFileInByte().get(bIdx).getFileInByte() befindet sichdie bereits eingelesene Datei
entity = new ByteArrayEntity(byteArrayList.getFileInByte().get(bIdx).getFileInByte());
CloseableHttpResponse response = null;
try
{
response = client.execute(method);
response.close();
client.close();
}[/CODE]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
J Datei Download vom Server Netzwerkprogrammierung 8
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
Aruetiise Socket Datei Endung Netzwerkprogrammierung 6
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
K HTTP Formulare füllen und Datei downloaden Netzwerkprogrammierung 23
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
A Datei erzeugen und auf der Weboberfläche downloaden (Tomcat) Netzwerkprogrammierung 4
Sogomn HTTP Datei herunterladen Netzwerkprogrammierung 13
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
F FTP Einzelne Datei von FTP-Server überprüfen Netzwerkprogrammierung 0
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
S Datei(XML) per RMI an Server schicken Netzwerkprogrammierung 0
V Datei Download Fenster Netzwerkprogrammierung 9
S Datei schreiben über Applet Netzwerkprogrammierung 8
C Socket Datei Übertragung Netzwerkprogrammierung 5
D Datei hochladen zu PHP Server Netzwerkprogrammierung 8
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
H Datei in DropBox schreiben Netzwerkprogrammierung 23
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
V Datei auf Server Schreiben Netzwerkprogrammierung 18
N Einen Server als ausführbare Datei exportieren Netzwerkprogrammierung 15
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
C Datei auf server speichern Netzwerkprogrammierung 16
P FTP Nochmal wachsende Datei per FTP lesen Netzwerkprogrammierung 9
W Datei automatisiert kopieren! Netzwerkprogrammierung 5
P Wachsende Datei per FTP lesen Netzwerkprogrammierung 2
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
G Txt datei von Website downloaden Netzwerkprogrammierung 8
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
S ActiveMQ, JMS und Datei übertragen Netzwerkprogrammierung 25
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
U Web Datei downloaden und bei Änderungen wieder zurückspielen Netzwerkprogrammierung 5
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
A HTTP Download einer Datei mit "Statistiken" Netzwerkprogrammierung 2
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
Dit_ FTP, Datei Hochladen Netzwerkprogrammierung 4
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
P Name der Download-Datei ermitteln Netzwerkprogrammierung 8
N Socket TCP Datei Transfer Netzwerkprogrammierung 2
L Java über php datei lesen? Netzwerkprogrammierung 18
P Socket Datei von Client zum Server übertragen --> Weiterleitung an Clients Netzwerkprogrammierung 16
Akrillo Datei per Netzwerk senden Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
L Größe einer Datei auslesen die im Netz liegt Netzwerkprogrammierung 4
weeego Ping über CMD, Umweg über Batch Datei sparen. Netzwerkprogrammierung 17
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
S StringArray in .txt Datei --> langsam wegen Client/Server!? Netzwerkprogrammierung 16
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
U Datei via UDP Netzwerkprogrammierung 8
C Dateigröße einer Datei im Internet ermitteln Netzwerkprogrammierung 2
S Error 404 obwohl die Datei existiert Netzwerkprogrammierung 9
T Datei Herunterladen und ausführen Netzwerkprogrammierung 5
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
C PCAP Datei auslesen Netzwerkprogrammierung 8
F Applet Datei Zugriff Netzwerkprogrammierung 13
G Datei performant im Netzwerk verschieben Netzwerkprogrammierung 4
M [Commons NET] Prüfen, ob auf FTP Datei vorhanden ist Netzwerkprogrammierung 2
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
E Größe der Datei vor Download ermitteln Netzwerkprogrammierung 3
C Dateiübertragung - Datei immer ein 4096faches von n Netzwerkprogrammierung 2
E Applet zum Datei-Upload Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
J Gibts die Datei? Netzwerkprogrammierung 3
K Datei-Upload per FTP Netzwerkprogrammierung 2
G Fehlermeldung beim Erzeugen der WSDL Datei unter Axis Netzwerkprogrammierung 2
S über rmi datei übertragen? Netzwerkprogrammierung 2
J Zeilenweises auslesen aus einer Datei über Server Netzwerkprogrammierung 6
G Datei über ObjectInputStream versenden Netzwerkprogrammierung 8
G.I.Joe Datei per POST übertragen Netzwerkprogrammierung 2
B Umfangreiche Batch Datei (Rmiregistry prüfung + Prog. start) Netzwerkprogrammierung 4
V Einen Eintrag aus einer Zip Datei von einem Server laden Netzwerkprogrammierung 2
M Datei auf einem Server ausführen Netzwerkprogrammierung 4
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
F Datei senden und empfangen Netzwerkprogrammierung 4
B Via Java Datei zu PHP-Script auf Apache hochladen Netzwerkprogrammierung 4
B knacken bei download von mp3 datei Netzwerkprogrammierung 2
T Datei senden Netzwerkprogrammierung 3
M Datei auf Remoteserver kopieren Netzwerkprogrammierung 8
B Datei speichern unter Netzwerkprogrammierung 10
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
R In Text Datei schreiben die auf einem Server liegt Netzwerkprogrammierung 8
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8
T Musik-Stream: Server sendet die Datei zu schnell ? Netzwerkprogrammierung 3
T Mit FTP verbinden, einen Ordner erstellen und Datei löschen Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben