简单的问题(很困惑,我在这里找不到答案):
我想从我的 AppEngine Java servlet(出站)执行多部分编码的 HTTP POST。 AppEngine 似乎不支持 Apache HTTP 库,并且本身不提供 API(仅 setPayload(byte[])
),但我想避免自己实现 Multipart 编码。所以:
有没有办法从 AppEngine Java 发送多部分 HTTP 正文?
是否有一个库可以将这样的主体编码为
byte[]
数组? (请注意,MultiPartEntity.getContent()
未实现。)然后我可以使用 AppEngine 内部 URLFetch API(由于异步调用功能,我更喜欢它)。
最佳答案
我编写了一个小帮助器方法,为 AppEngine 添加了 Multipart POST 支持(使用 Apache HTTP 客户端库)。
public static void addMultipartBodyToRequest(MultipartEntity entity, HTTPRequest req) throws IOException{
/*
* turn Entity to byte[] using ByteArrayOutputStream
*/
ByteArrayOutputStream bos = new ByteArrayOutputStream();
entity.writeTo(bos);
byte[] body = bos.toByteArray();
/*
* extract multipart boundary (body starts with --boundary\r\n)
*/
String boundary = new BufferedReader(new StringReader(new String(body))).readLine();
boundary = boundary.substring(2, boundary.length());
/*
* add multipart header and body
*/
req.addHeader(new HTTPHeader("Content-type", "multipart/form-data; boundary=" + boundary));
req.setPayload(body);
}
调用代码如下所示:
MultipartEntity e = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
e.addPart("part1", new StringBody("value1"));
e.addPart("part2", new StringBody("value2"));
HTTPRequest req = new HTTPRequest(new URL(myUrl), HTTPMethod.POST);
ServletHelper.addMultipartBodyToRequest(e, req);
URLFetchServiceFactory.getURLFetchService().fetchAsync(req);
关于java - AppEngine 上的多部分 POST (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13591653/