Ich bin ziemlich grün für HttpClient und finde den Mangel an (und / oder offensichtlich falscher) Dokumentation äußerst frustrierend. Ich versuche, den folgenden Beitrag (unten aufgeführt) mit Apache Http Client zu implementieren, habe aber keine Ahnung, wie ich das tatsächlich tun soll. Ich werde mich für die nächste Woche in der Dokumentation vergraben, aber vielleicht könnten erfahrenere HttpClient-Codierer mir früher eine Antwort geben.
Post:
Content-Type: multipart/form-data; boundary=---------------------------1294919323195
Content-Length: 502
-----------------------------1294919323195
Content-Disposition: form-data; name="number"
5555555555
-----------------------------1294919323195
Content-Disposition: form-data; name="clip"
rickroll
-----------------------------1294919323195
Content-Disposition: form-data; name="upload_file"; filename=""
Content-Type: application/octet-stream
-----------------------------1294919323195
Content-Disposition: form-data; name="tos"
agree
-----------------------------1294919323195--
Antworten:
Verwenden Sie MultipartEntityBuilder aus der HttpMime-Bibliothek , um die gewünschte Anforderung auszuführen.
In meinem Projekt mache ich das so:
HttpEntity entity = MultipartEntityBuilder .create() .addTextBody("number", "5555555555") .addTextBody("clip", "rickroll") .addBinaryBody("upload_file", new File(filePath), ContentType.create("application/octet-stream"), "filename") .addTextBody("tos", "agree") .build(); HttpPost httpPost = new HttpPost("http://some-web-site"); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); HttpEntity result = response.getEntity();
Hoffe das wird helfen.
(Dieser Beitrag wurde aktualisiert, um MultipartEntityBuilder anstelle von veraltetem MultipartEntity zu verwenden, wobei @mtomy-Code als Beispiel verwendet wird.)
quelle
httpClient
Hier ist der Beispielcode in HttpClient 4.3.x.
http://hc.apache.org/httpcomponents-client-4.3.x/httpmime/examples/org/apache/http/examples/entity/mime/ClientMultipartFormPost.java
import org.apache.http.entity.mime.MultipartEntityBuilder; HttpPost httppost = new HttpPost("http://localhost:8080" + "/servlets-examples/servlet/RequestInfoExample"); FileBody bin = new FileBody(new File(args[0])); StringBody comment = new StringBody("A binary file of some kind", ContentType.TEXT_PLAIN); HttpEntity reqEntity = MultipartEntityBuilder.create() .addPart("bin", bin) .addPart("comment", comment) .build(); httppost.setEntity(reqEntity);
Um die Klasse MultipartEntityBuilder verwenden zu können, benötigen Sie httpmime , ein Unterprojekt von HttpClient
HttpClient 4.3.x:
http://hc.apache.org/httpcomponents-client-4.3.x/index.html
httpmime 4.3.x:
http://hc.apache.org/httpcomponents-client-4.3.x/httpmime/dependency-info.html
quelle
Wenn Sie das Paket org.apache.commons.httpclient.HttpClient verwenden, kann Ihnen das vielleicht helfen!
HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager(); //here should set HttpConnectionManagerParams but not important for you HttpClient httpClient = new HttpClient(httpConnectionManager); PostMethod postMethod = new PostMethod("http://localhost/media"); FilePart filePart = new FilePart("file", new File(filepath)); StringPart typePart = new StringPart("type", fileContent.getType(), "utf-8"); StringPart fileNamePart = new StringPart("fileName", fileContent.getFileName(), "utf-8"); StringPart timestampPart = new StringPart("timestamp", ""+fileContent.getTimestamp(),"utf-8"); Part[] parts = { typePart, fileNamePart, timestampPart, filePart }; MultipartRequestEntity multipartRequestEntity = new MultipartRequestEntity(parts, postMethod.getParams()); postMethod.setRequestEntity(multipartRequestEntity); httpClient.executeMethod(postMethod); String responseStr = postMethod.getResponseBodyAsString();
quelle