13

我正在使用 Apache HTTPClient 4。我正在做非常普通的多部分工作,如下所示:

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

如何查看我发布的内容?

4

4 回答 4

17

使用org.apache.http.entity.mime.MultipartEntity writeTo(java.io.OutputStream)方法将内容写入 a java.io.OutputStream,然后将该流转换为 aStringbyte[]

// 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();

注意:这仅适用于足够小的多部分实体,可以读入内存,并且小于 2Gb,这是 Java 中字节数组的最大大小。

于 2012-05-02T05:31:37.440 回答
1

以下肯定会有所帮助:

ByteArrayOutputStream content = new ByteArrayOutputStream();
httpEntity.writeTo(content);
logger.info("Calling "+url+" with data: "+content.toString());

与第一个答案相比,上面有一个修复,不需要将任何参数传递给 ByteArrayOutputStream 构造函数。

于 2020-08-08T05:32:24.720 回答
0

你不知道内容吗?虽然,您正在StringBody通过提供sharedValue. 那么,怎么可能与sharedValue.

于 2011-01-18T06:25:42.473 回答
0

我已经通过以下代码打印了 Multipart 请求,您可以尝试

ByteArrayOutputStream bytes = new ByteArrayOutputStream();

entity.writeTo(bytes);

String content = bytes.toString();

Log.e("MultiPartEntityRequest:",content);
于 2015-09-23T11:48:56.440 回答