Utility class to safely do a http POST request.

git-svn-id: https://samskivert.googlecode.com/svn/trunk@1233 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
ray
2003-09-26 02:36:41 +00:00
parent ba21ce387c
commit 20fd2a0bd7
@@ -0,0 +1,81 @@
//
// $Id: HttpPostUtil.java,v 1.1 2003/09/26 02:36:41 ray Exp $
package com.samskivert.net;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import com.samskivert.util.ServiceWaiter;
/**
* Contains utility methods for doing a form post.
*/
public class HttpPostUtil
{
/**
* Return the results of a form post. Note that the http request takes
* place on another thread, but this thread blocks until the results
* are returned or it times out.
*
* @param url from which to make the request.
* @param submission the entire submission eg "foo=bar&baz=boo&futz=foo".
* @param timeout time to wait for the response, in seconds, or -1
* for forever.
*/
public static String httpPost (final URL url, final String submission,
int timeout)
throws IOException, ServiceWaiter.TimeoutException
{
final ServiceWaiter waiter = new ServiceWaiter(
(timeout < 0) ? ServiceWaiter.NO_TIMEOUT : timeout);
Thread tt = new Thread() {
public void run () {
try {
HttpURLConnection conn =
(HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestProperty(
"Content-Type", "application/x-www-form-urlencoded");
DataOutputStream out = new DataOutputStream(
conn.getOutputStream());
out.writeBytes(submission);
out.flush();
out.close();
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
StringBuffer buf = new StringBuffer();
for (String s; null != (s = reader.readLine()); ) {
buf.append(s);
}
reader.close();
waiter.postSuccess(buf.toString()); // yay
} catch (IOException e) {
waiter.postFailure(e); // boo
}
}
};
tt.start();
if (waiter.waitForResponse()) {
return (String) waiter.getArgument();
} else {
throw (IOException) waiter.getArgument();
}
}
}