Comment poster des fichiers avec JSoup?

J’utilise les valeurs de code suivantes à l’aide de JSoup:

Document document = Jsoup.connect("http://www......com/....php") .data("user","user","password","12345","email","[email protected]") .method(Method.POST) .execute() .parse(); 

Et maintenant, je veux aussi soumettre un fichier. Comme un formulaire avec un champ de fichier. Est-ce possible ? Si est que comment?

Ceci n’est pris en charge que depuis Jsoup 1.8.2 (13 avril 2015) via la nouvelle méthode data(Ssortingng, Ssortingng, InputStream) .

 Ssortingng url = "http://www......com/....php"; File file = new File("/path/to/file.ext"); Document document = Jsoup.connect(url) .data("user", "user") .data("password", "12345") .data("email", "[email protected]") .data("file", file.getName(), new FileInputStream(file)) .post(); // ... 

Dans les versions plus anciennes, l’envoi de demandes multipart/form-data n’est pas pris en charge. Votre meilleur choix consiste à utiliser un client HTTP complet, tel que Apache HttpComponents Client . Vous pouvez finalement obtenir la réponse du client HTTP sous forme de Ssortingng afin de pouvoir l’ Jsoup#parse() à la Jsoup#parse() .

 Ssortingng url = "http://www......com/....php"; File file = new File("/path/to/file.ext"); MultipartEntity entity = new MultipartEntity(); entity.addPart("user", new SsortingngBody("user")); entity.addPart("password", new SsortingngBody("12345")); entity.addPart("email", new SsortingngBody("[email protected]")); entity.addPart("file", new InputStreamBody(new FileInputStream(file), file.getName())); HttpPost post = new HttpPost(url); post.setEntity(entity); HttpClient client = new DefaultHttpClient(); HttpResponse response = client.execute(post); Ssortingng html = EntityUtils.toSsortingng(response.getEntity()); Document document = Jsoup.parse(html, url); // ... 

La réponse acceptée fonctionne et était correcte au moment de la rédaction, mais depuis lors, JSoup a évolué et depuis la version 1.8.2, il est possible d’envoyer des fichiers dans le cadre de formulaires en plusieurs parties :

 File file1 = new File("/path/to/file"); FileInputStream fs1 = new FileInputStream(file1); Connection.Response response = Jsoup.connect("http://www......com/....php") .data("user","user","password","12345","email","[email protected]") .data("file1", "filename", fs1) .method(Method.POST) .execute(); 

Ce message m’a conduit sur la bonne voie, mais j’ai dû modifier les réponses affichées pour que mon cas d’utilisation fonctionne. Voici mon code:

  FileInputStream fs = new FileInputStream(fileToSend); Connection conn = Jsoup.connect(baseUrl + authUrl) .data("username",username) .data("password",password); Document document = conn.post(); System.out.println("Login successfully! Session Cookie: " + conn.response().cookies()); System.out.println("Attempting to upload file..."); document = Jsoup.connect(baseUrl + uploadUrl) .data("file",fileToSend.getName(),fs) .cookies(conn.response().cookies()) .post(); 

La différence fondamentale réside dans le fait que je me connecte d’abord au site, conserve le cookie de la réponse ( conn ) et l’utilise ensuite pour le téléchargement ultérieur du fichier.

J’espère que ça aide les gars.