How do I write to an OutputStream using DefaultHttpClient?

后端 未结 4 1896
挽巷
挽巷 2020-12-09 05:10

How do I get an OutputStream using org.apache.http.impl.client.DefaultHttpClient?

I\'m looking to write a long string to an output stream.

4条回答
  •  暖寄归人
    2020-12-09 05:46

    You can't get an OutputStream from BasicHttpClient directly. You have to create an HttpUriRequest object and give it an HttpEntity that encapsulates the content you want to sent. For instance, if your output is small enough to fit in memory, you might do the following:

    // Produce the output
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    Writer writer = new OutputStreamWriter(out, "UTF-8");
    writeXml(writer);
    
    // Create the request
    HttpPost request = new HttpPost(uri);
    request.setEntity(new ByteArrayEntity(out.toByteArray()));
    
    // Send the request
    DefaultHttpClient client = new DefaultHttpClient();
    HttpResponse response = client.execute(request);
    

    If the data is large enough that you need to stream it, it becomes more difficult because there's no HttpEntity implementation that accepts an OutputStream. You'd need to write to a temp file and use FileEntity or possibly set up a pipe and use InputStreamEntity

    EDIT See oleg's answer for sample code that demonstrates how to stream the content - you don't need a temp file or pipe after all.

提交回复
热议问题