Socket
Send HTTP POST request with Socket
This is an example of how to send an HTTP POST request with a Socket. A socket is an endpoint for communication between two machines. Sending an HTTP POST request using a Socket implies that you should:
- Get the InetAddress of a specified host, using the host’s name, with
getByName(String host)
API method of InetAddress. - Create a new Socket and connect it to a specified port number at a specified IP address.
- Get the output stream of the socket, using
getOutputStream()
API method of Socket. - Create an OutputStreamWriter with the socket ouputstream that uses the given UTF-8 encoder.
- Create a BufferedWriter that uses a default-sized output buffer.
- Use
write(String str)
API method to send the headers and the parameters andflush()
API method to flush the stream. - Get the socket input stream, using
getInputStream()
API method of Socket. - Create a new BufferedReader, using a new InputStreamReader with the socket input stream.
- Use
readLine()
API method to read the response. - Don’t forget to close both the BufferedWriter and the BufferedReader using the
close()
API methods.
Let’s take a look at the code snippet that follows:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package com.javacodegeeks.snippets.core; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; import java.net.URLEncoder; public class SendHTTPPOSTRequestWithSocket { public static void main(String[] args) { try { String params = URLEncoder.encode( "param1" , "UTF-8" ) + "=" + URLEncoder.encode( "value1" , "UTF-8" ); params += "&" + URLEncoder.encode( "param2" , "UTF-8" ) + "=" + URLEncoder.encode( "value2" , "UTF-8" ); String hostname = "mysite.com" ; int port = 80 ; InetAddress addr = InetAddress.getByName(hostname); Socket socket = new Socket(addr, port); String path = "/myapp" ; // Send headers BufferedWriter wr = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream(), "UTF8" )); wr.write( "POST " +path+ " HTTP/1.0rn" ); wr.write( "Content-Length: " +params.length()+ "rn" ); wr.write( "Content-Type: application/x-www-form-urlencodedrn" ); wr.write( "rn" ); // Send parameters wr.write(params); wr.flush(); // Get response BufferedReader rd = new BufferedReader( new InputStreamReader(socket.getInputStream())); String line; while ((line = rd.readLine()) != null ) { System.out.println(line); } wr.close(); rd.close(); } catch (Exception e) { e.printStackTrace(); } } } |
This was an example of how to send an HTTP POST request using a Socket in Java.
And what should come in response to this request? And what are these lines for:
wr.write("POST "+path+" HTTP/1.0rn");
wr.write("Content-Length: "+params.length()+"rn");
wr.write("Content-Type: application/x-www-form-urlencodedrn");
wr.write("rn");