GZip POST request with HTTPClient in Java

前端 未结 1 1506
忘掉有多难
忘掉有多难 2020-11-29 02:06

I need to send a POST request to a web server which includes a gzipped request parameter. I\'m using Apache HttpClient and I\'ve read that it supports Gzip out of the box, b

相关标签:
1条回答
  • 2020-11-29 02:53

    You need to turn that String into a gzipped byte[] or (temp) File first. Let's assume that it's not an extraordinary large String value so that a byte[] is safe enough for the available JVM memory:

    String foo = "value";
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
    try (GZIPOutputStream gzos = new GZIPOutputStream(baos)) {
        gzos.write(foo.getBytes("UTF-8"));
    }
    
    byte[] fooGzippedBytes = baos.toByteArray();
    

    Then, you can send it as a multipart body using HttpClient as follows:

    MultipartEntity entity = new MultipartEntity();
    entity.addPart("foo", new InputStreamBody(new ByteArrayInputStream(fooGzippedBytes), "foo.txt"));
    
    HttpPost post = new HttpPost("http://example.com/some");
    post.setEntity(entity);
    
    HttpClient client = new DefaultHttpClient();
    HttpResponse response = client.execute(post);
    // ...
    

    Note that HttpClient 4.1 supports the new ByteArrayBody which can be used as follows:

    entity.addPart("foo", new ByteArrayBody(fooGzippedBytes, "foo.txt"));
    
    0 讨论(0)
提交回复
热议问题