How to send HTTP GET / POST request in Java
This post describes how to make HTTP GET and POST request on server. I will use httpbin server for testing. It returns you everything you send there : query params, post data, headers, etc.
HTTP GET request
package httpclientexample;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
//import javax.net.ssl.HttpsURLConnection;
public class HttpClientExample {
public static void main(String[] args) {
try {
HttpClientExample hce = new HttpClientExample();
String body = hce.get("http://httpbin.org/get");
System.out.println(body);
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
public String get(String getUrl) throws IOException {
URL url = new URL(getUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
return this.read(con.getInputStream());
}
private String read(InputStream is) throws IOException {
BufferedReader in = null;
String inputLine;
StringBuilder body;
try {
in = new BufferedReader(new InputStreamReader(is));
body = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
body.append(inputLine);
}
in.close();
return body.toString();
} catch(IOException ioe) {
throw ioe;
} finally {
this.closeQuietly(in);
}
}
protected void closeQuietly(Closeable closeable) {
try {
if( closeable != null ) {
closeable.close();
}
} catch(IOException ex) {
}
}
}
HTTP POST request
package httpclientexample;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
//import javax.net.ssl.HttpsURLConnection;
public class HttpClientExample {
public static void main(String[] args) {
try {
HttpClientExample hce = new HttpClientExample();
String body = hce.post("http://httpbin.org/post", "data=test data");
System.out.println(body);
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
public String post(String postUrl, String data) throws IOException {
URL url = new URL(postUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
this.sendData(con, data);
return this.read(con.getInputStream());
}
protected void sendData(HttpURLConnection con, String data) throws IOException {
DataOutputStream wr = null;
try {
wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(data);
wr.flush();
wr.close();
} catch(IOException exception) {
throw exception;
} finally {
this.closeQuietly(wr);
}
}
private String read(InputStream is) throws IOException {
BufferedReader in = null;
String inputLine;
StringBuilder body;
try {
in = new BufferedReader(new InputStreamReader(is));
body = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
body.append(inputLine);
}
in.close();
return body.toString();
} catch(IOException ioe) {
throw ioe;
} finally {
this.closeQuietly(in);
}
}
protected void closeQuietly(Closeable closeable) {
try {
if( closeable != null ) {
closeable.close();
}
} catch(IOException ex) {
}
}
}
Conclusion
If you need to send additional headers, for example when you want to upload JSON data, just use setRequestProperty. It takes header field name and it’s value as parameters.
...
con.setRequestProperty("Content-Type", "application/json");
...
References
httpbin : HTTPS Request & Response page for testing HTTP client
Do you like this post? Is it helpful? I am always learning and trying new technologies, processes and approaches. When I struggle with something and finally manage to solve it, I share my experience. If you want to support me, please use button below. If you have any questions or comments, please reach me via email juffalow@juffalow.com.
I am also available as a mentor if you need help with your architecture, engineering team or if you are looking for an experienced person to validate your thoughts.
