2011-01-18 14 views
12

Używam Apache HttpClient 4. Robię bardzo normalne wieloczęściowy rzeczy tak:Jak mogę zobaczyć zawartość żądania 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); 

Chcę zobaczyć zawartość podmiotu (lub post, cokolwiek) przed wysłaniem. Jednak ta konkretna metoda nie jest zaimplementowana:

entity.getContent() // not defined for MultipartEntity 

Jak mogę zobaczyć, co publikuję?

+0

org.apache.http.entity.mime.MultipartEntity - zawiera getContent() z dokumentacją - http: //hc.apache .org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntity.html –

+4

tak, a ta funkcja nie jest zaimplementowana. spowoduje to wyjątek NotImplementedException – asdasd

Odpowiedz

0

Czy nie znasz zawartości? Chociaż budujesz model StringBody, podając sharedValue. Jak może być inny niż sharedValue.

+2

, ponieważ żądanie pełnego formularza wieloczęściowego jest inne niż suma zawartości treści ciągu. tam opakowania dla danych, i chcę zobaczyć to całe gówno – asdasd

+1

Jest jeszcze jeden typowy przypadek użycia: automatyczne logowanie. Natknąłem się na to pytanie, ponieważ loguję każdą interakcję, wysyłając po prostu 'HttpRequestBase' do infrastruktury rejestrowania, która wyodrębnia' HttpEntity' (jeśli zachowuje się) itp. I loguje ją. –

16

Zastosowanie metody org.apache.http.entity.mime.MultipartEntitywriteTo(java.io.OutputStream) napisać treść do java.io.OutputStream, a następnie przekonwertować strumienia do String lub 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(); 

Uwaga: Funkcja ta działa tylko dla podmiotów wieloczęściowych zarówno mniejszy niż 2 GB, maksymalna rozmiar tablicy bajtów w Javie i wystarczająco mały, aby można go było odczytać w pamięci.

0

Mam wydrukowany wniosek wieloczęściową przez następujący kod, można spróbować jak

ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 

entity.writeTo(bytes); 

String content = bytes.toString(); 

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

To naprawdę nie dodaje więcej informacji niż istniejące odpowiedzi, w szczególności [zaakceptowana odpowiedź] (http://stackoverflow.com/a/10408206). –

+0

było to bardziej czytelne i łatwe w oczach. Doceniam, kiedy trudny do odczytania kod, szczególnie gdy się spieszy, aby zrozumieć, jest zwięzły. – killjoy