2011-01-18 14 views
12

estoy usando Apache HTTPClient 4. Estoy haciendo las cosas de varias partes muy normales como esto:¿Cómo puedo ver el contenido de una solicitud de MultipartForm?

val entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
entity.addPart("filename", new FileBody(new File(fileName), "application/zip").asInstanceOf[ContentBody]) 
entity.addPart("shared", new StringBody(sharedValue, "text/plain", Charset.forName("UTF-8"))); 

val post = new HttpPost(uploadUrl); 
post.setEntity(entity); 

Quiero ver el contenido de la entidad (o posterior, lo que sea) antes de enviarlo. Sin embargo, ese método específico no está implementado:

entity.getContent() // not defined for MultipartEntity 

¿Cómo puedo ver lo que estoy publicando?

+0

org.apache.http.entity.mime.MultipartEntity - contiene getContent() de la documentación - http: //hc.apache .org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntity.html –

+4

sí, y esta función no está implementada. le dará una NotImplementedException – asdasd

Respuesta

0

¿No conoces el contenido? Aunque está construyendo el StringBody suministrando sharedValue. Entonces, ¿cómo podría ser diferente de sharedValue.

+2

porque la solicitud de formulario completo multiparte es diferente de la suma del contenido del cuerpo de la cadena. hay envoltorios para los datos, y quiero ver toda esa mierda – asdasd

+1

. Hay otro caso de uso común para esto: el registro automático. Me encontré con esta pregunta porque registro cada interacción simplemente enviando 'HttpRequestBase' a una infraestructura de registro que extrae' HttpEntity' (si existe), etc. y lo registra. –

16

Utilice el método org.apache.http.entity.mime.MultipartEntitywriteTo(java.io.OutputStream) a escribir el contenido a un java.io.OutputStream, y luego convertir esa corriente a un String o byte[]:

// import java.io.ByteArrayOutputStream; 
// import org.apache.http.entity.mime.MultipartEntity; 
// ... 
// MultipartEntity entity = ...; 
// ... 

ByteArrayOutputStream out = new ByteArrayOutputStream(entity.getContentLength()); 

// write content to stream 
entity.writeTo(out); 

// either convert stream to string 
String string = out.toString(); 

// or convert stream to bytes 
byte[] bytes = out.toByteArray(); 

Nota: esto sólo funciona para las entidades multiparte tanto menor que 2 GB, el máximo tamaño de una matriz de bytes en Java, y lo suficientemente pequeño para ser leído en la memoria.

0

He impresa la solicitud de varias partes siguiendo el código, puede tratar como

ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 

entity.writeTo(bytes); 

String content = bytes.toString(); 

Log.e("MultiPartEntityRequest:",content); 
+0

Esto realmente no agrega más información que las respuestas existentes, particularmente la [respuesta aceptada] (http://stackoverflow.com/a/10408206). –

+0

esto era más legible y fácil para los ojos. Aprecio cuando el código difícil de leer, especialmente cuando tienes prisa por entenderlo, es conciso. – killjoy

Cuestiones relacionadas