Hi,
I need to assemble a multi-part request, consisting of some normal http
headers, an xml document in the first mime-part, and a binary document
in the second mime-part. I need to augment the mime-parts with their
own http headers, also; specifically a Content-Type declaration and a
Content-Disposition header for each one (which I believe is allowed by
the MIME standard, from what I can discern from the rfc). My current
code looks like this:
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(target);
// set the request headers
post.setRequestHeader("Slug", slug);
post.setRequestHeader("X-On-Behalf-Of", user);
// construct the xml and binary file parts
FilePart xmlPart = new FilePart("atom", new File(xml), "text/xml", null);
FilePart binaryPart = new FilePart("binary", new File(binary));
// make the multipart request body
Part[] parts = { xmlPart, binaryPart };
MultipartRequestEntity re = new MultipartRequestEntity(parts,
post.getParams());
post.setRequestEntity(re);
// execute the post
client.executeMethod(post);
The Content-Disposition header will be automatically generated by HttpClient.
If you want a greater control over the process of MIME content generation,
please consider upgrading to HttpClient 4.0 which has much improved MIME
capabilities based on Apache mime4j.
I have upgraded my client to using httpclient 4.0 beta 2 with the same
version of httpmime and httpcore, but am stuck on where in the API I can
now set my custom Content-Disposition.
http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpmime/src/examples/org/apache/http/examples/entity/mime/ClientMultipartFormPost.java
Following this example, I have re-written my code as follows:
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(target);
// set the request headers
post.setHeader("Slug", slug);
post.setHeader("X-On-Behalf-Of", user);
// construct the xml and binary file parts
FileBody xmlBody = new FileBody(new File(xml));
FileBody binBody = new FileBody(new File(binary));
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("atom", xmlBody);
reqEntity.addPart("binary", binBody);
post.setEntity(reqEntity);
HttpResponse response = client.execute(post);
But I still don't see any way of passing in http headers for the mime
parts. I presume that I'm missing something fundamental about how to
use httpclient 4 with the httpmime extension, but I can't find any
examples of doing what it is that i'm trying to do to follow.
What am I missing?
Thanks again,
Richard
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]