11.8. Sending POST Data from a File

Problem

You need to send the data from a file in an HTTP POST request.

Solution

Create a PostMethod, create a File object, and call setRequestBody( ) and setRequestContentLength() on the method before it is executed. The PostMethod will send a request with a Content-Length header, which reflects the size of the file sent in the request body. The following example demonstrates the use of PostMethod to send data from a file in a request body:

               import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.PostMethod;

HttpClient client = new HttpClient( );
        
// Create POST method
String weblintURL = "http://ats.nist.gov/cgi-bin/cgi.tcl/echo.cgi";
PostMethod method = new PostMethod( weblintURL );

File file = new File( "project.xml" );
method.setRequestBody( new FileInputStream( file ) );
               method.setRequestContentLength( (int)file.length( ) );

// Execute and print response
client.executeMethod( method );
String response = method.getResponseBodyAsString( );
System.out.println( response );

method.releaseConnection( );

The previous example hits a CGI script, which echoes the contents of the request body. When this example is executed, the response body is printed with the contents of the file that was uploaded in an HTTP POST request.

Discussion

This recipe sets the request body of an HTTP POST directly by passing a File object to method.setRequestBody(). In addition to accepting a File object, setRequestBody( ) can accept an InputStream or a String. Any time a request body is populated, the Content-Length header must be set to reflect the size of the request body by calling method.setRequestContentLength( ). The previous recipe sent parameters in an HTTP POST request body by calling setParameter( ) and addParameter(), and the Content-Length and Content-Type headers are automatically populated when the method is executed. In this example, the Content-Type header is not sent with the request as the content can be any arbitrary textual or binary data.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.223.172.132