2011-01-18 3 views
12

Я использую Apache HTTPClient 4. Я делаю очень нормальные многослойные вещи, как это:Как я могу просмотреть содержимое запроса 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); 

Я хочу видеть содержимый объект (или должность, что угодно), прежде чем я посылаю его. Однако этот конкретный метод не реализован:

entity.getContent() // not defined for MultipartEntity 

Как я могу видеть, что я публикую?

+0

org.apache.http.entity.mime.MultipartEntity - содержит getContent() из документации - HTTP: //hc.apache .org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntity.html –

+4

да, и эта функция не реализована. он предоставит вам NotImplementedException – asdasd

ответ

0

Вы не знаете контента? Хотя, вы строите StringBody, поставляя sharedValue. Итак, как он может отличаться от sharedValue.

+2

, потому что полный запрос на множественную форму отличается от суммы содержимого тела строки. theres wrappers для данных, и я хочу видеть все это дерьмо. – asdasd

+1

Существует еще один распространенный прецедент для этого: автоматическое ведение журнала. Я столкнулся с этим вопросом, потому что я регистрирую каждое взаимодействие, просто отправляя «HttpRequestBase» в инфраструктуру регистрации, которая извлекает «HttpEntity» (если существует) и т. Д. И регистрирует ее. –

16

Используйте org.apache.http.entity.mime.MultipartEntitywriteTo(java.io.OutputStream) метод, чтобы написать содержимое в java.io.OutputStream, а затем преобразовать этот поток в String или 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(); 

Примечание: это работает только для многоэлементных структур как меньше 2Гб, максимальное размер массива байтов в Java и достаточно маленький для чтения в память.

0

Я напечатал Мультисекционный запрос на следующий код, вы можете попробовать, как

ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 

entity.writeTo(bytes); 

String content = bytes.toString(); 

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

На самом деле это не добавляет больше информации, чем существующие ответы, в частности [принятый ответ] (http://stackoverflow.com/a/10408206). –

+0

Это было более читаемо и легко на глазах. Я ценю, когда трудночитаемый код специально, когда вы спешите понимать, делается кратким. – killjoy

Смежные вопросы