Hi Matt, The problem is that a stream can only be read from once, hence, unbuffered POST & POST content cannot be repeated.
There's a another (probably better) solution to this problem. All you have to do is to activate 'expect: 100-continue' handshake. Refer to the javadoc below for details http://jakarta.apache.org/commons/httpclient/apidocs/org/apache/commons/httpclient/methods/ExpectContinueMethod.html#setUseExpectHeader(boolean) Hope this helps Oleg On Tue, 2003-09-23 at 19:15, Rezvani, Matt wrote: > When setting the request content length of an enclosed entity to be stored > on the WebDAV server using the PutMethod, the HttpClient returns an > "Unbuffered entity enclosing request can not be repeated" HttpException. I > am aware that if the request is not buffered, then the PutMethod (or > PostMethod) cannot retry the request in case of an authentication challenge > or an I/O error. An alternate solution would be to let the PutMethod buffer > the entire file by setting the request content length to > EntityEnclosingMethod.CONTENT_LENGTH_AUTO. This is OK for small files; > however for enormous size files it causes an out-of-memory error. My > question is how do I send a retry request after an authentication challenge > has been sent back by the server, and why can't the > EntityEnclosingMethod.writeRequestBody() send the request again from it's > requestStream. > > Here is a sample code. > > //-------------------------- > import org.apache.commons.httpclient.HttpClient; > import org.apache.commons.httpclient.UsernamePasswordCredentials; > import org.apache.commons.httpclient.methods.PutMethod; > import java.io.*; > > public class PutMethodExample > { > public static void main(String args[]) throws Exception > { > HttpClient client = new HttpClient(); > // Assuming that the credentials are passed to the > HttpClient using > // the HttpState.setCredentials > > PutMethod put = new > > PutMethod("http://myServer:/webdav/example.txt"); > File bigFile = new File("c:\\j2sdk-1_4_2-windows-i586.exe"); > long fileLength = bigFile.length(); > put.setRequestContentLength((int)fileLength); > put.setRequestBody(new FileInputStream(bigFile)); > > int status = client.executeMethod(put); > put.releaseConnection(); > } > } > > Thanks, > Matt > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
