java - AppEngine 上的多部分 POST (Java)

标签 java google-app-engine http apache-httpclient-4.x

简单的问题(很困惑,我在这里找不到答案):

我想从我的 AppEngine Java servlet(出站)执行多部分编码的 HTTP POST。 AppEngine 似乎不支持 Apache HTTP 库,并且本身不提供 API(仅 setPayload(byte[])),但我想避免自己实现 Multipart 编码。所以:

  1. 有没有办法从 AppEngine Java 发送多部分 HTTP 正文?

  2. 是否有一个库可以将这样的主体编码为 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/

相关文章:

Java getter 带参数?

java - Sonar Maven 插件在多模块 Maven 项目上比 Sonar Jenkins 或 Sonar CLI Scanner 发现更多错误

google-app-engine - Appengine ZigZag Merge Join Algo

php - Laravel 响应发送 android APK 文件

php - 关于使用后退按钮的 Web 导航

java - 如何使用 ->(箭头)运算符?

java - 为什么 getSize() 在这里对我不起作用,为什么调整大小时会闪烁?

Python 问题 - 我有一个类列表,如何删除重复项?

java - URLFetchService 因超时而引发哪个异常?

node.js - 如果来自同一浏览器, Node http 请求不会同时执行