/* * RawHttpConnection.java * * Created on: 13-Nov-2009 * */ package netukar.http.raw; import java.io.BufferedInputStream; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketTimeoutException; /** * This is an example of sending HTTP requests using the socket. * * @author Radovan Netuka * @version 1.0 */ public class RawHttpConnection { /** socket for sending HTTP requests */ private Socket socket; /** * Creates a new instance of RawHttpConnection. */ public RawHttpConnection() { socket = new Socket(); } /** * Sends HTTP request to the server and returns the response. * * @param host * server address (for ex. www.google.com) * * @param request * HTTP request as string * * @return HTTP response from the server or null, if the * request has either been incorrect, or there was a timeout. * * @throws IOException */ public String sendRequest(String host, String request) throws IOException { try { socket.connect(new InetSocketAddress(host, 80)); socket.setSoTimeout(1000); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream(), "UTF-8")); writer.write(request); writer.flush(); BufferedInputStream reader = new BufferedInputStream(socket.getInputStream()); StringBuilder b = new StringBuilder(); try { byte[] buffer = new byte[8192]; int bytesRead; while ((bytesRead = reader.read(buffer, 0, 8192)) != -1) { b.append(new String(buffer, 0, bytesRead)); } } catch (SocketTimeoutException ex) { /* bug in Java - read operation doesn't get End of Stream from the Socket object and would wait forever without timeout */ } finally { reader.close(); } writer.close(); return b.toString(); } finally { socket.close(); } } }