import java.io.*; import java.net.*; /* Este programa conecta a um WEB server e faz downloads de uma específica URL. Usa o protocolo HTTP. */ public class HttpClient { public static void main( String[] args ) { try { // Verifica os argumentos if ((args.length != 1 ) && (args.length != 2)) throw new IllegalArgumentException("Faltam argumentos"); // Pega uma string para escrever o conteúdo da URL OutputStream to_file; if (args.length == 2) to_file = new FileOutputStream( args[1] ); else to_file = System.out; // Agora usa uma class URL para analisar o que foi passado pelo // usuário como parâmetro: protocolo, host, porta, filename URL url = new URL( args[0] ); String protocol = url.getProtocol(); if (!protocol.equals("http")) throw new IllegalArgumentException("Usar o protocolo http"); String host = url.getHost(); int port = url.getPort(); if (port == -1) port = 80; // Se não há porta, // use o default do http String filename = url.getFile(); // Abrir uma conexão na rede com socket para a porta e o host // especificados Socket socket = new Socket(host,port); // Pega entrada e saída para o socket InputStream from_server = socket.getInputStream(); PrintWriter to_server = new PrintWriter ( new OutputStreamWriter(socket.getOutputStream() )); // Envia o comando GET HTTP para o WEB server, especificando o // arquivo to_server.println("GET " + filename); to_server.flush(); // Envie agora // Le a resposta do server, e a escreve no arquivo byte[] buffer = new byte[4096]; int bytes_read; while(( bytes_read = from_server.read(buffer)) != -1) to_file.write(buffer, 0, bytes_read); // Quando o server fecha a conexão, nós fechamos nosso arquivo socket.close(); to_file.close(); } catch ( Exception e) { // Informe dos erros ocorridos System.err.println(e); System.err.println("Ao usar: java HttpClient ]"); } } }