Ich benutze Apache HttpComponents v4.3.6 (Maven httpclient und httpmime). Ich muss eine Datei als Multipart hochladen. Der Fiddler-Befehl, der funktioniert, sieht folgendermaßen aus.Java http Post für mehrteilige Daten
Anforderungs-Header auf Fiddler:
Content-Type: multipart/form-data; boundary=c2d7073062e24d86ad739647574e14b9
Accept: application/json
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) Gecko/20100101 Firefox/22.0
Anfrage Körper auf Fiddler:
--c2d7073062e24d86ad739647574e14b9
Content-Disposition: form-data; name="categoryFile"; filename="self-classification-categories.tsv"
585743 583099 Existing Catrali 4Category ch Description of 4 Existing Category false false false Some notes 4 relating to Existing Category
--c2d7073062e24d86ad739647574e14b9--
Wo der eigentliche Inhalt der Datei ist:
585743 583099 Existing Catrali 4Category ch Description of 4 Existing Category false false false Some notes 4 relating to Existing Category
Jetzt, Ich bin versuchen, diese Post-Anfrage (oben beschrieben) mit Apache Http Client zu implementieren, haben aber keine Ahnung, wie es eigentlich geht. Um die oben genannte Anforderung in Java (1.8) zu konvertieren, habe ich versucht: (Boundary-Wert: c2d7073062e24d86ad739647574e14b9)
httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(createPostURI(host, path));
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) Gecko/20100101 Firefox/22.0");
httpPost.setHeader("Content-Type", "multipart/form-data; boundary=c2d7073062e24d86ad739647574e14b9");
httpPost.setHeader("Accept", "application/json");
String fileContent = "--c2d7073062e24d86ad739647574e14b9\r\nContent-Disposition: form-data; name=\"categoryFile\"; filename=\"self-classification-categories.tsv\""+
"\r\n\r\n"+
"585743 583099 Existing Catrali 4Category ch Description of 4 Existing Category false false false Some notes 4 relating to Existing Category"
+"\r\n--c2d7073062e24d86ad739647574e14b9--";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.setBoundary("c2d7073062e24d86ad739647574e14b9");
builder.addTextBody("body", fileContent,ContentType.MULTIPART_FORM_DATA);
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
response = httpclient.execute(httpPost, new GenericResponseHandler());
Ich bin sicher, dass die Art, wie ich bin Crafting den Anfrage-Körper in Java falsch ist. Daher sehe ich 403 Fehler, der irgendwie irreführend ist, da die REST-API, die ich anrufe, diesen Fehler verursacht, wenn er das erwartete Format nicht sieht. Ich würde jede Hilfe schätzen.
Vielen Dank im Voraus.
403 kommt, wenn Server den Zugriff verweigert. Dein Code sieht für mich gut aus. Können Sie auch versuchen, den Body-Inhalt aus einer Datei zu lesen und zu benutzen? –