URL and HTTP Handling in Java


Introduction

In Java, handling URLs and HTTP requests is essential for building networked applications that interact with web services or websites. Java provides the java.net package, which contains several classes like URL, HttpURLConnection, and URLConnection to facilitate working with URLs and handling HTTP requests and responses.

In this tutorial, we will focus on:

  • Creating and manipulating URLs using the URL class.
  • Sending HTTP requests and handling responses using HttpURLConnection class.

Working with the URL Class

The URL class represents a Uniform Resource Locator, which is a reference to a resource on the web. It provides methods to retrieve various parts of the URL such as the protocol, host, port, and path.

Creating a URL Object

To create a URL object, you need to pass a valid URL string to its constructor. Below is an example:

Example 1: Create a URL Object

          import java.net.*;
      
          public class URLExample {
              public static void main(String[] args) {
                  try {
                      // Create a URL object
                      URL url = new URL("https://www.example.com");
      
                      // Print various components of the URL
                      System.out.println("Protocol: " + url.getProtocol());
                      System.out.println("Host: " + url.getHost());
                      System.out.println("Port: " + url.getPort());
                      System.out.println("Path: " + url.getPath());
                  } catch (MalformedURLException e) {
                      e.printStackTrace();
                  }
              }
          }
        

In this example:

  • We create a URL object by passing the string "https://www.example.com".
  • We use methods like getProtocol(), getHost(), getPort(), and getPath() to retrieve and print different components of the URL.

Handling HTTP Requests and Responses

The HttpURLConnection class is used to send HTTP requests and receive responses from a URL. This class allows you to specify the request method (such as GET or POST), set headers, and handle the response.

Example 2: Sending a GET Request

In this example, we send a GET request to a URL and print the response:

Example 2: Sending a GET Request

          import java.io.*;
          import java.net.*;
      
          public class HttpGetExample {
              public static void main(String[] args) {
                  try {
                      // Create a URL object
                      URL url = new URL("https://jsonplaceholder.typicode.com/posts/1");
      
                      // Open an HttpURLConnection to the URL
                      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      
                      // Set the request method to GET
                      connection.setRequestMethod("GET");
      
                      // Get the response code
                      int responseCode = connection.getResponseCode();
                      System.out.println("Response Code: " + responseCode);
      
                      // If response code is 200 (OK), read and print the response
                      if (responseCode == HttpURLConnection.HTTP_OK) {
                          BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                          String inputLine;
                          StringBuffer response = new StringBuffer();
      
                          // Read the response
                          while ((inputLine = in.readLine()) != null) {
                              response.append(inputLine);
                          }
                          in.close();
      
                          // Print the response
                          System.out.println("Response: " + response.toString());
                      }
                      connection.disconnect();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }
        

In this example:

  • We create a URL object with the target URL for the GET request.
  • We open a connection to the URL using openConnection() and cast it to HttpURLConnection.
  • We set the request method to "GET" and retrieve the response code using getResponseCode().
  • If the response code is 200 (HTTP OK), we read the response using an input stream and print it.

Example 3: Sending a POST Request

In this example, we send a POST request to a URL with some data:

Example 3: Sending a POST Request

          import java.io.*;
          import java.net.*;
      
          public class HttpPostExample {
              public static void main(String[] args) {
                  try {
                      // Create a URL object
                      URL url = new URL("https://jsonplaceholder.typicode.com/posts");
      
                      // Open an HttpURLConnection to the URL
                      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      
                      // Set the request method to POST
                      connection.setRequestMethod("POST");
      
                      // Enable input and output streams
                      connection.setDoOutput(true);
      
                      // Set headers
                      connection.setRequestProperty("Content-Type", "application/json");
      
                      // Create the POST data
                      String jsonData = "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}";
      
                      // Send the POST data
                      try (OutputStream os = connection.getOutputStream()) {
                          byte[] input = jsonData.getBytes("utf-8");
                          os.write(input, 0, input.length);
                      }
      
                      // Get the response code
                      int responseCode = connection.getResponseCode();
                      System.out.println("Response Code: " + responseCode);
      
                      // Read and print the response
                      if (responseCode == HttpURLConnection.HTTP_CREATED) {
                          BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                          String inputLine;
                          StringBuffer response = new StringBuffer();
      
                          while ((inputLine = in.readLine()) != null) {
                              response.append(inputLine);
                          }
                          in.close();
      
                          System.out.println("Response: " + response.toString());
                      }
                      connection.disconnect();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }
        

In this example:

  • We create a URL object with the target URL for the POST request.
  • We set the request method to "POST" and enable input and output streams.
  • We set the content type to "application/json" and send a JSON payload.
  • We handle the response, check if it is HTTP 201 (Created), and print the response content.

Conclusion

In this tutorial, we learned how to handle URLs and HTTP requests in Java using the URL and HttpURLConnection classes. We demonstrated how to:

  • Create and manipulate URL objects using the URL class.
  • Send GET and POST requests to a server and handle the responses.
Java's java.net package makes it easy to interact with web resources over the internet, allowing you to build networked applications that can fetch data from remote servers or submit data to them.





Advertisement