Question

Je suis assez vert pour HttpClient et je trouve le manque de documentation (et ou manifestement incorrecte) extrêmement frustrant. Je suis en train de mettre en œuvre le post suivant (voir la liste ci-dessous) avec le client Apache Http, mais ne sais pas comment le faire réellement. Je vais me enterrer dans la documentation pour la semaine prochaine, mais les codeurs HttpClient peut-être plus expérimenté pourrait avoir une réponse plus tôt.

message:

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--
Était-ce utile?

La solution

Utilisation de la MultipartEntityBuilder HttpMime bibliothèque pour effectuer la demande tu veux.

Dans mon projet, je le fais de cette façon:

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();

Espérons que cela vous aidera.

(Mise à jour ce post à utiliser MultipartEntityBuilder au lieu de MultipartEntity dépréciée, en utilisant le code @mtomy comme l'exemple)

Autres conseils

  

MultipartEntity montre maintenant comme dépréciée. J'utilise apache   httpclient 4.3.3 - personne ne sait ce que nous sommes censés utiliser   au lieu? Je trouve la recherche sur google pour être si plein de MultipartEntity   exemples que je ne trouve rien. - vextorspace 31 mars '14 à 20h36

Voici l'exemple de code dans 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);

Pour utiliser la classe MultipartEntityBuilder, vous avez besoin httpmime , qui est un sous-projet de 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 / dépendance-info.html

si l'emballage de l'utilisation org.apache.commons.httpclient.HttpClient, peut-être que peut vous aider!

    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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top