Make HTTP POST Or GET Request From Java
In this day of age where many applications need to communicate with web servers you need to make a simple HTTP call to the server. Usually There are two types of calls you’ll need to make an HTTP GET or HTTP POST. So instead of blabbing words, here is a code sample of how you do it.
Code example (sorry for the lack of formatting):
package HTTPUtil;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLConnection;public class HTTPRequestPoster
{
/**
* Sends an HTTP GET request to a url
*
* @param endpoint - The URL of the server. (Example: " http://www.yahoo.com/search")
* @param requestParameters - all the request parameters (Example: "param1=val1¶m2=val2"). Note: This method will add the question mark (?) to the request - DO NOT add it yourself
* @return - The response from the end point
*/
public static String sendGetRequest(String endpoint, String requestParameters)
{
String result = null;
if (endpoint.startsWith("http://"))
{
// Send a GET request to the servlet
try
{
// Construct data
StringBuffer data = new StringBuffer();// Send data
String urlStr = endpoint;
if (requestParameters != null && requestParameters.length () > 0)
{
urlStr += "?" + requestParameters;
}
URL url = new URL(urlStr);
URLConnection conn = url.openConnection ();// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = rd.readLine()) != null)
{
sb.append(line);
}
rd.close();
result = sb.toString();
} catch (Exception e)
{
e.printStackTrace();
}
}
return result;
}/**
* Reads data from the data reader and posts it to a server via POST request.
* data - The data you want to send
* endpoint - The server's address
* output - writes the server's response to output
* @throws Exception
*/
public static void postData(Reader data, URL endpoint, Writer output) throws Exception
{
HttpURLConnection urlc = null;
try
{
urlc = (HttpURLConnection) endpoint.openConnection();
try
{
urlc.setRequestMethod("POST");
} catch (ProtocolException e)
{
throw new Exception("Shouldn't happen: HttpURLConnection doesn't support POST??", e);
}
urlc.setDoOutput(true);
urlc.setDoInput(true);
urlc.setUseCaches(false);
urlc.setAllowUserInteraction(false);
urlc.setRequestProperty("Content-type", "text/xml; charset=" + "UTF-8");OutputStream out = urlc.getOutputStream();
try
{
Writer writer = new OutputStreamWriter(out, "UTF-8");
pipe(data, writer);
writer.close();
} catch (IOException e)
{
throw new Exception("IOException while posting data", e);
} finally
{
if (out != null)
out.close();
}InputStream in = urlc.getInputStream();
try
{
Reader reader = new InputStreamReader(in);
pipe(reader, output);
reader.close();
} catch (IOException e)
{
throw new Exception("IOException while reading response", e);
} finally
{
if (in != null)
in.close();
}} catch (IOException e)
{
throw new Exception("Connection error (is server running at " + endpoint + " ?): " + e);
} finally
{
if (urlc != null)
urlc.disconnect();
}
}/**
* Pipes everything from the reader to the writer via a buffer
*/
private static void pipe(Reader reader, Writer writer) throws IOException
{
char[] buf = new char[1024];
int read = 0;
while ((read = reader.read(buf)) >= 0)
{
writer.write(buf, 0, read);
}
writer.flush();
}}











(2 votes)
RSS Feeds 



January 16th, 2008 at 6:38 am
Thanks, this has been useful.
-Frank
February 22nd, 2008 at 11:02 am
Hello!….I whant make 1 page of internet and i don’t know how …Can you help me?Plz contact me !!!
May 7th, 2008 at 1:56 pm
How do I properly create the reader object for the postData function?
May 7th, 2008 at 4:11 pm
Update: this works
new StringReader(”type=1&keyword=abc”)
June 11th, 2008 at 8:29 am
thanks, this was really helpful!
June 12th, 2008 at 8:08 pm
The “postData()” method does not work. I can’t find a sample on line that does. Every time I get the same thing:
Server returned HTTP response code: 405 for URL
If not that error, other samples give this:
Unexpected end of file from server
Why can’t people post working samples? IF I’m suppose to set headers to do a post expected by the server I hit, HOW do I find our what headers need to be set?
June 13th, 2008 at 12:29 am
URL formAction = new URL(”http://targetsite.com/search.php”);
FileWriter fw = new FileWriter (”results.html”);
postData(new StringReader(”type=1&keyword=abc”), formAction, fw);
fw.close();