http request

Didi_R

Mitglied
hi,
ich soll ein request unter eine URL machen, ich hab kein plan davon, und wäre für hilfe dankbar!

Die URL: http://193.168.178.1/httpdpost

Unter der eben genannten URL soll ein Request mit einem Content-Type = 'multipart/form-data' gemacht werden, damit der Webserver reagiert. Es werden 2 Werte als Daten akzeptiert, wobei der erste 'YourDoc' pflicht ist, der zweite ('User') ist optional.

für YourDoc:

Dieser Parameter muss zum einen 'filename' liefern und als Wert den Namen der Datei (ist vaiable) haben und zum anderen die Datei selbst als 'application/octet-stream' anliefern. Schematisch sieht dies wie folgt aus:

-----------------------------SHEJSXYZ usw.
Content-Disposition: form-data; name="YourDoc"; filename="myfilename.pdf"
Content-Type: application/octet-stream

ABCDEFGHIJKLMNOPYRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPYRSTUVWXYZabcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPYRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPYRSTUVWXYZabcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPYRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPYRSTUVWXYZabcdefghijklmnopqrstuvwxyz
<...>
-----------------------------SHEJSXYZ usw. --


Wenn die Anfrage korrekt gestellt wurde, bekomme ich ein andere Datei zurück die ich dann speichern muss (der Content-Type der Response ist 'application/pdf' ).

Wie gesagt, ich habe kein ahnung wie ich davor gehen soll, wenn mir jemand ein Beispiel geben könnte, ist das super!
Bislang habe ich den commons httpclient verwendet, bisherigen code kann ich nicht liefern weil ich da nur im dunklem rumstochere!

gruß
didi
 

ARadauer

Top Contributor
so ungefähr...

Java:
String url = "http://193.168.178.1/httpdpost";
PostMethod filePost = new PostMethod(url);

Part[] parts = { //hier deine parameter.. ich schicke einen user/password und ein xml file mit...
               new StringPart("login", user),
               new StringPart("pass", password),
               new FilePart("xml", file)
         };  

filePost.setRequestEntity(
               new MultipartRequestEntity(parts, filePost.getParams())
         );

HttpClient client = new HttpClient();
 int status = client.executeMethod(filePost);
         
         if (status == HttpStatus.SC_OK) {
            LOG.info("Received: "+status+" "+HttpStatus.getStatusText(status));
         } else {
            LOG.error("Received: "+status+" "+HttpStatus.getStatusText(status));
         }
         String result = filePost.getResponseBodyAsString();
...
usw...
 

ARadauer

Top Contributor
asso pdf speichern.... ja dann ist String result = filePost.getResponseBodyAsString(); blödsinn...

so halt irgendwie filePost.getResponseBodyAsStream() und den stream in ein File speichern, dann wird das schon klappen...
 

Didi_R

Mitglied
Erstmal danke euch beiden, ich werde ich mir das mal anschauen!


Kennst du den RFC 1521 schon?
RFC 1521 (rfc1521) - MIME (Multipurpose Internet Mail Extensions) Part One

Binärdaten werden zum senden über HTTP in Base64 konvertiert.

Bessere antworten gibt es für bessere Problembeschreibungen.
Ein "hab keine Ahnung was ich machen soll" ist zwar ehrlich, stellt aber keine Frage dar ;)

Sorry das ich kein Fragzeichen eingefügt habe! Nächstes mal formuliere ich den satz um bzgl. ob mir jemand ein Beispiel für einen Ansatz geben kann damit dort ein Fragezeichen steht! ;)
 

Didi_R

Mitglied
Also ich habe immer noch ein problem, weil ich es nicht kapiere oder so.
folgenden code den ich mehr oder weniger dank ARadauer hab:

Java:
File file = new File("c:/temp/test.pdf");

try{
	String url = "http://192.168.178.1/httpdpost";
	PostMethod filePost = new PostMethod(url);

	StringBuilder sb = new StringBuilder();
	sb.append("-----------------------------SHEJSF8SGBOUNDARY\n");
	sb.append("Content-Disposition: form-data; name=\"PDFfile\"; filename=\"");
	sb.append(file.getName());
	sb.append("\"\n");
	sb.append("Content-Type: application/octet-stream\n");

	Part[] parts = {
               new StringPart("PDFfile", sb.toString()),
               new FilePart(FilePart.DEFAULT_CONTENT_TYPE, file)
               
         };  
	
	filePost.setRequestEntity(
               new MultipartRequestEntity(parts, filePost.getParams())
	         );
	 
	HttpClient client = new HttpClient();
	 int status = client.executeMethod(filePost);
	         
     if (status == HttpStatus.SC_OK) {
        System.out.println("Received: "+status+" "+HttpStatus.getStatusText(status));
     } else {
    	System.out.println("Received: "+status+" "+HttpStatus.getStatusText(status));
     }
     InputStream input = filePost.getResponseBodyAsStream();

     System.err.println("Test");
     
}catch(Exception e){
	e.printStackTrace();
}


Das mit dem PDF-Anhang läuft falsch! denke mal das ich die Datei einlesen muss und an den Paramter anfüge! Aber vielleicht habt ihr eine Idee! Denke mal das sonst der Ansatz oben richtig ist, da dass Log vom Server folgendes nur sagt:

2010-01-25 09:16:39 INFO: WEB [9] Client request from 192.168.178.5 > "POST /httpdpost" -> Method "POST" accepted.
2010-01-25 09:16:40 ERR: WEB [9] POSTDataReceived: Unable to retrieve PDFfile content (EBadRequest)



Danke für eure Hilfe!
Falls jemand 5 min Zeit hat, kann ich ihm auch per PM den link geben was ich da machen soll, damit es evtl. schneller geht!

Gruß didi
 

ARadauer

Top Contributor
da hast du was falsch verstanden.. dieses
Java:
    sb.append("-----------------------------SHEJSF8SGBOUNDARY\n");
    sb.append("Content-Disposition: form-data; name=\"PDFfile\"; filename=\"");
    sb.append(file.getName());
    sb.append("\"\n");
    sb.append("Content-Type: application/octet-stream\n");
kannst du dir sparen... dafür ist unsere httpclient Bibliothek zuständig.

ein
Java:
    Part[] parts = {
            new FilePart("PDFfile", file)               
         };
müsste reichen.

Die boundary, Content-Disposition, Content-Type usw... alles was zum http header dazu gehört... das wird von httpclient erstellt


Besorg dir mal wireshark und schau dir an was du an den server schickst...
Und ich würde mir auf jeden fall mal das durchlesen Hypertext Transfer Protocol ? Wikipedia dann hast du mal ein bisschen Ahnung von dem was da im Hintergrund abläuft...
 
Zuletzt bearbeitet:

Didi_R

Mitglied
verdammt, auf das gleiche bin ich auch gerade gekommen!

Java:
new FilePart("PDFfile", FilePart.DEFAULT_CONTENT_TYPE, file)
hat mich erstmal weitergebracht!

setze Thread erstmal auf erledigt, mache ihn nochmal auf wenn ich weitere hilfe brauche!

Vielen dank erstmal
 

Didi_R

Mitglied
So, das funktioniert jetzt alles super,
jetzt habe ich das nächste Problem

das ganze soll noch über einen weiteren Weg funktionieren und zwar mit Authentifizierung!

Ich habe folgende Dateien, die ich zum testen verwenden kann:

- DemoUser.pem --> the client certificate for authentication and SSL tunneling
in PEM format (Base64 codec).

- DemoUser.cer --> the client certificate for authentication and SSL tunneling
in DER binary format.

- DemoUser.key --> private key file for DemoUser.cer


Hier meine Code ohne Authentifizierung:

Java:
String url = "https://192.168.178.1/httpdpost";
PostMethod filePost = new PostMethod(url);

Part[] parts = { new FilePart("PDFfile", file) };

filePost.setRequestEntity(new MultipartRequestEntity(parts,
		filePost.getParams()));

HttpClient client = new HttpClient();

int status = client.executeMethod(filePost);

...

Ich habe versucht mit HttpClient - HttpClient SSL Guide weiter zukommen,
aber ich verstehe nicht wie ich das mit den oben genannten Zertifikaten zusammen bringen soll!

Hoffe nochmal auf eure Hilfe!

gruß
didi
 

Didi_R

Mitglied
hmm, bin leider noch nicht weitergekommen.

hat den keiner ein beipiel oder ein tutorial wo alles von dem durchgenommen wird was ich brauche?

gruß
didi
 

ARadauer

Top Contributor
zur Vollständigkeit hier meine PM auch noch rein:

kenn ich mich leider auch nicht gut aus...
Welche Fehlermeldung bekommst du genau?
Musst du das cert lokal instlalieren?
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Das hat bei mir mal geklappt... ich wollte aber das Cert nicht installieren, da mir mir das auf einem Server läuft dann hab ich das probiert: HttpClient - HttpClient SSL Guide

das hat bei mir auch geklappt...
 

Didi_R

Mitglied
zur Vollständigkeit hier meine PM auch noch rein:

kenn ich mich leider auch nicht gut aus...
Welche Fehlermeldung bekommst du genau?
Musst du das cert lokal instlalieren?
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Das hat bei mir mal geklappt... ich wollte aber das Cert nicht installieren, da mir mir das auf einem Server läuft dann hab ich das probiert: HttpClient - HttpClient SSL Guide

das hat bei mir auch geklappt...

Hi,
also ich habe jetzt das Zertifikat importiert!
einmal
[c]keytool -import -v -alias cacert -file DemoBenutzer.cer -storepass mypass -keystore DemoBenutzer.key[/c]

Dann habe ich mein Programm gestarte, er bleibt bei
[c]int status = client.executeMethod(filePost);[/c] stehen!

Nach 4 minuten kommt eine Fehlermeldung:

Java:
javax.net.ssl.SSLException: Received close_notify during handshake
	at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.a(DashoA12275)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.b(DashoA12275)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.j(DashoA12275)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
	at com.sun.net.ssl.internal.ssl.AppOutputStream.write(DashoA12275)
	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:66)
	at java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)
	at org.apache.commons.httpclient.WireLogOutputStream.write(WireLogOutputStream.java:68)
	at org.apache.commons.httpclient.methods.multipart.FilePart.sendData(FilePart.java:223)
	at org.apache.commons.httpclient.methods.multipart.Part.send(Part.java:312)
	at org.apache.commons.httpclient.methods.multipart.Part.sendParts(Part.java:385)
	at org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity.writeRequest(MultipartRequestEntity.java:164)
	at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
	at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
	at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
	at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
	at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
	at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
	at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)

Ich habe das gefühl das mein ansatz schon falsch ist

gruß
didi
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O HTTP Wer hilft mit meinem UTF-8 http Request ? Netzwerkprogrammierung 1
M http request and response Netzwerkprogrammierung 0
B Socket HTTP-Request führt zu Endlosschleife Netzwerkprogrammierung 5
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
O Http request Netzwerkprogrammierung 7
L Body eines http Request auslesen Netzwerkprogrammierung 2
K Ende eines HTTP Response/Request Netzwerkprogrammierung 6
G HTTP-Request InputStream-Problem Netzwerkprogrammierung 5
G auf http-request antworten. Netzwerkprogrammierung 3
L Java HTTP Request Netzwerkprogrammierung 3
S HTTP Request erstellen Netzwerkprogrammierung 2
B lange Strings in http-Request? Netzwerkprogrammierung 3
M erst POST dann Http-Request über URLConnection Netzwerkprogrammierung 3
m@nu Ende von Stream bei HTTP-Request Netzwerkprogrammierung 3
D HTTP Request erstellen (Form Name übergeben!) Netzwerkprogrammierung 3
P Easy Http Request Netzwerkprogrammierung 9
J HTTP-POST-Request mit Anhang über Socket Netzwerkprogrammierung 2
Z HTTP Request Netzwerkprogrammierung 3
A http request per socket an apache server Netzwerkprogrammierung 5
M Ein HTTP-request aus Java heraus senden Netzwerkprogrammierung 3
J HTTP Request Netzwerkprogrammierung 2
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
G Http Request Netzwerkprogrammierung 2
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
G localhost im Backend https vs. http Netzwerkprogrammierung 9
J Simple HTTP Framework (basierend auf expressjs) Netzwerkprogrammierung 1
M HTTP Http requests aufzeichnen Netzwerkprogrammierung 2
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
M Verbindungszeit berechnen (TCP, HTTP/1.0, HTTP/1.1) Netzwerkprogrammierung 2
P HTTP Bild von einem Server per http kopieren Netzwerkprogrammierung 1
U HTTP XML vom Server abholen oder http Abfragen, Entscheidung treffen Netzwerkprogrammierung 0
P HTTP Server / Client Netzwerkprogrammierung 1
S HTTP-Requeste von Browser mit Java sniffen? Netzwerkprogrammierung 9
E HTTP java.lang.IllegalArgumentException: protocol = http host = null Netzwerkprogrammierung 1
M Server mit HTTP Netzwerkprogrammierung 9
H Sockets oder HTTP- Methoden? Netzwerkprogrammierung 3
D HTTP nochne frage zu http requests Netzwerkprogrammierung 6
D HTTP Bräuchte hilfe mit Http Requests Netzwerkprogrammierung 6
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
F HTTP HTTP-Download: Dateien in einem Verzeichnis ermitteln Netzwerkprogrammierung 8
T HTTP Einen HTTP Server erstellen Netzwerkprogrammierung 20
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
Dit_ HTTP Einfache HTTP-Anfrage Netzwerkprogrammierung 6
nrg FileUpload HTTP POST Netzwerkprogrammierung 5
T Socket Java HTTP-Proxy Netzwerkprogrammierung 3
A HTTP Zugriff auf http-Server - Error 400 Netzwerkprogrammierung 11
B HTTP JSESSIONID in Http(s)URLConnection loswerden! Netzwerkprogrammierung 13
E Socket HTTP-Server Netzwerkprogrammierung 6
C HTTP POST Connect Netzwerkprogrammierung 9
D HTTP Java HTTP Kommunikation Netzwerkprogrammierung 9
Tobse HTTP ServerSocket HTTP Netzwerkprogrammierung 4
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
N Http Client Netzwerkprogrammierung 3
W Asynchroner HTTP Client / non-blocking I/O Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
T HTTP Encoding von Http-Streams Netzwerkprogrammierung 2
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
Kr0e Simpler HTTP Stream server Test Netzwerkprogrammierung 3
K HTTP-Anfrage an einen Server wird nicht beantwortet Netzwerkprogrammierung 3
J org.apache.http.auth.NTCredentials Netzwerkprogrammierung 2
W Problem mit HTTP-Dateiübertragung Netzwerkprogrammierung 6
A org.apache.commons http client in Netbeans einbinden Netzwerkprogrammierung 3
G Http Client mit Redirect Enabled Netzwerkprogrammierung 2
M Http POST liefert kryptischen Content Netzwerkprogrammierung 4
G Sockets und HTTP: Ende des Datenempfangs erkennen Netzwerkprogrammierung 3
B Wie HTTP GET/POST Anfrage versenden? Netzwerkprogrammierung 7
R HTTP Server Memory Leak? Netzwerkprogrammierung 6
K optimale HTTP Downloads Netzwerkprogrammierung 15
I http sniffer gesucht Netzwerkprogrammierung 10
G Socket + HTTP Header Netzwerkprogrammierung 2
R HTTP ServerThread Netzwerkprogrammierung 4
J HTTP GET? Netzwerkprogrammierung 6
C FTP vs HTTP Netzwerkprogrammierung 10
M HTTP-Response extrem fragmentiert Netzwerkprogrammierung 4
W HTTP-Upload Netzwerkprogrammierung 2
M HTTP response code: 401 ; ?aber im browser ist es abrufbar? Netzwerkprogrammierung 5
O Axis2 erstellt HTTP/1.1 anstatt HTTP/1.0 Netzwerkprogrammierung 3
B Fehler 401 bei http GET Netzwerkprogrammierung 2
E upload progress bei einem http file post Netzwerkprogrammierung 5
K http-download Netzwerkprogrammierung 12
I Apache http-client: Problem beim Proxyaufruf Netzwerkprogrammierung 2
M RMI over HTTP Netzwerkprogrammierung 5
M HTTP Requests verarbeiten und Response senden mit Java Netzwerkprogrammierung 14
G HTTP Response mit Transfer-Encoding:chunked einlesen Netzwerkprogrammierung 4
J Java Programm für Upload von Dateien per HTTP Netzwerkprogrammierung 7
L http kommunikation mit und ohne multipart Netzwerkprogrammierung 4
L file upload / download über http Netzwerkprogrammierung 5
G HTTP Client :: Komme nicht über den Proxy Netzwerkprogrammierung 7
B non US-ASCII Dateinamen über HTTP? Netzwerkprogrammierung 2
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
P File von http-Server kopieren Netzwerkprogrammierung 5
G unvollständige Daten: Http Client-Server-Kommunikation Netzwerkprogrammierung 2
G http 1.1 socket? Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben