Question

Je vous écris d'un simple extrait qui envoie une simple requête de poste.

Actuellement, je suis la construction de la demande comme ceci:

    // Construct data
    String data = URLEncoder.encode("param1", "UTF-8") + "=" + URLEncoder.encode("val1", "UTF-8");
    data += "&" + URLEncoder.encode("param2", "UTF-8") + "=" + URLEncoder.encode("val2", "UTF-8");

    // Send data
    URL url = new URL("http://server:8080/servlet/upload");
    URLConnection conn = url.openConnection();
    conn.setDoOutput(true);
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.write(data);
    wr.flush();

    // do stuff with response....

Cela fonctionne, à partir de maintenant. Mais je dois ajouter un téléchargement de fichier comme une requête POST multipart. Comment puis-je faire ceci? Je voudrais éviter d'utiliser HttpClient de biens communs, si possible.

Était-ce utile?

La solution

À l'heure actuelle, vous n'utilisez pas du tout HTTP. Si vous avez l'intention de faire un post, la première chose que vous devez faire est de vous assurer que vous envoyez les en-têtes correctes et ce, donc vous engageant réellement dans une connexion HTTP. Le vous devez suivre la RFC 1867 ( http://tools.ietf.org/html/rfc1867) pour encoder le contenu du fichier dans votre POST. Ce n'est pas facile, ce qui explique pourquoi il y a des bibliothèques là-bas qui font cela pour vous. Donc, je dois demander: pourquoi éviter HttpClient? Je l'ai toujours utilisé à cette fin. Il est fiable, complète et performante. Manquez-vous sur (mémoire / disque) espace?

Autres conseils

Au point, vous devez construire un outputstream avec les données dans le format spécifié dans RFC 1687 et RFC 2388 . Il est beaucoup de travail, je ne vais pas faire un exemple de code de coup d'envoi, désolé :) Le RFC contient cependant des informations claires et plusieurs exemples comment les données doivent ressembler. Il est tout à fait faisable.

Essayez ceci comme cela a fonctionné dans mon cas

File f = new File(filePath);
PostMethod filePost = new PostMethod(url);
Part[] parts = { new FilePart("file", f) };
filePost.setRequestEntity(new MultipartRequestEntity(parts,
filePost.getParams()));
HttpClient client = new HttpClient();
status = client.executeMethod(filePost);
logger.info("upload status: " + status);

Cet extrait de code m'a bien servi:

scroll top