¿Cómo publicar archivos usando JSoup?

Estoy usando los siguientes valores de publicación de código usando JSoup:

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

Y ahora quiero enviar un archivo, también. Como un formulario con un campo de archivo. Es posible ? ¿Si es más que cómo?

Esto solo se admite desde Jsoup 1.8.2 (13 de abril de 2015) a través del nuevo método de data(String, String, InputStream) .

 String 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", "info@tutorialswindow.com") .data("file", file.getName(), new FileInputStream(file)) .post(); // ... 

En versiones anteriores, no se admite el envío multipart/form-data solicitudes multipart/form-data . Su mejor apuesta es usar un cliente HTTP de plena capacidad para esto, como Apache HttpComponents Client . En última instancia, puede obtener la respuesta del cliente HTTP como una String modo que pueda alimentarla al Jsoup#parse() .

 String url = "http://www......com/....php"; File file = new File("/path/to/file.ext"); MultipartEntity entity = new MultipartEntity(); entity.addPart("user", new StringBody("user")); entity.addPart("password", new StringBody("12345")); entity.addPart("email", new StringBody("info@tutorialswindow.com")); 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); String html = EntityUtils.toString(response.getEntity()); Document document = Jsoup.parse(html, url); // ... 

La respuesta aceptada funciona y fue correcta en el momento de la escritura, pero desde entonces JSoup ha evolucionado y desde la versión 1.8.2 es posible enviar archivos como parte de formularios de varias partes :

 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","info@tutorialswindow.com") .data("file1", "filename", fs1) .method(Method.POST) .execute(); 

Esta publicación me llevó al camino correcto, pero tuve que modificar las respuestas publicadas para que mi caso de uso funcionara. Aquí está mi código:

  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 diferencia básica es que primero inicio sesión en el sitio, retengo la cookie de la respuesta ( conn ) y luego la uso para la posterior carga del archivo.

Espero que ayude chicos.