2011-01-18 7 views
12

Sto usando Apache HTTPClient 4. sto facendo cose più parti molto normale come questo:Come posso vedere il contenuto di una richiesta 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); 

Voglio vedere il contenuto del soggetto (o post, qualunque cosa) prima di inviarlo. Tuttavia, questo specifico metodo non è implementato:

entity.getContent() // not defined for MultipartEntity 

Come posso vedere che cosa sto postando?

+0

org.apache.http.entity.mime.MultipartEntity - contiene getContent() dalla documentazione - http: //hc.apache .org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntity.html –

+4

sì, e questa funzione non è implementata. ti darà una NotImplementedException – asdasd

risposta

0

Non conosci il contenuto? Sebbene, si stia costruendo il StringBody fornendo sharedValue. Quindi, come potrebbe essere diverso da sharedValue.

+2

perché la richiesta di modulo multipart completo è diversa dalla somma del contenuto del corpo della stringa. ci sono wrapper per i dati, e voglio vedere tutta quella merda – asdasd

+1

C'è un altro caso d'uso comune per questo: la registrazione automatica. Mi sono imbattuto in questa domanda perché registro ogni interazione semplicemente inviando il 'HttpRequestBase' a un'infrastruttura di logging che estrae' HttpEntity' (se esistente), ecc. E lo registra. –

16

Utilizzare il metodo org.apache.http.entity.mime.MultipartEntitywriteTo(java.io.OutputStream) per scrivere il contenuto a un java.io.OutputStream e quindi convertire tale flusso ad 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: questo funziona solo per le entità più parti sia più piccolo di 2 Gb, il massimo dimensione di un array di byte in Java e abbastanza piccola da essere letta in memoria.

0

ho stampato la richiesta Multipart dal seguente codice, si può provare come

ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 

entity.writeTo(bytes); 

String content = bytes.toString(); 

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

Questo in realtà non aggiunge ulteriori informazioni rispetto alle risposte esistenti, in particolare la [risposta accettata] (http://stackoverflow.com/a/10408206). –

+0

questo era più leggibile e facile per gli occhi. Apprezzo quando il codice di difficile lettura, specialmente quando si ha fretta di capire, è reso conciso. – killjoy