2

単純な問題(私はここで答えを見つけることができなかったので混乱しています):

AppEngine Javaサーブレット(アウトバウンド)からマルチパートエンコードされたHTTPPOSTを実行したい。AppEngineはApacheHTTPlibをサポートしていないようで、API自体も提供していません(のみ setPayload(byte[]))が、マルチパートエンコーディングを自分で実装することは避けたいと思います。それで:

  1. AppEngine JavaからマルチパートHTTPボディを送信する方法はありますか?

  2. byte[]そのような本体を配列にエンコードするライブラリはありますか?(これMultiPartEntity.getContent()は実装されていないことに注意してください。)次に、AppEngineの内部URLFetch APIを使用できます(非同期呼び出し機能があるため、これを使用することをお勧めします)。

4

2 に答える 2

2

(Apache HTTPクライアントライブラリを使用して)AppEngineにマルチパートPOSTサポートを追加する小さなヘルパーメソッドを作成しました。

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);
于 2012-11-27T21:30:28.387 に答える
0

MultipartEntityから使用できますhttpmime

彼女は一例です。

于 2012-11-27T21:28:59.573 に答える