Ajuda com socket's

3 respostas
aszarael

Pessoal,

Tenho uma classe para download de arquivo ou paginas, e agora estou criando um socket para que eu possa usar um programa chamado pryvox de modo que a cada chamada que eu faça ele percorra um caminho diferente. Ou seja quando eu executar minha classe ela tem que fazer a requisição passar pelo privox. Classe download
public class download {
    
   Leitura teclado = new Leitura(); // instanciando classe 
   
   public void getpagina(String endereco) throws IOException{
   try {
        FileWriter writer = new FileWriter(new File("temp1.htm")); // criar o arquivo - colocar, true para append
        PrintWriter grava = new PrintWriter(writer,true);  //  cria objeto para inserir texto, true faz append por linha
        URL url = new URL(endereco); // instancia a classe url
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));// cria um leitor de buffer e recebe o input strem e o urlstrem que e o resultado da consulta.
        String linha= new String("");// cria string linhas
       while ((linha = reader.readLine()) != null){ // enquando o buffer não estiver vazio
             grava.println(linha); // adiciona ao arquivo  
             grava.flush();
     }
        grava.close(); // fechar gravar
        writer.close(); //fechar writer
     }
     catch(UnknownHostException ioe){
         System.out.println("Erro ao acessar a url desejada.");
     }
     catch(SocketException ioe){
         System.out.println("Erro de protocolo TCP");
     }
     catch(UnknownServiceException ioe){
         System.out.println("Erro ao ler a pagina");
     }
     catch(EOFException ioe){
         System.out.println("Ouve uma interrupção ao gravar o arquivo");
     }
     catch(FileNotFoundException ioe){
         System.out.println("A pagina requisitada ou caminho invalido");
     }
     catch(CharConversionException ioe){
         System.out.println("Erro ao converter a url");
     }
     catch(UnsupportedEncodingException ioe){
         System.out.println("The Character Encoding is not supported.");
     }
   }
}

Agora estou tentando setar a porta do privox,e para isso pelo que entendi preciso usar um socket.
Criei este metodo para setar, mais como eu faço agora para o meu metodo download usar esse socket ?

Metodo que criei para definir socket
public void definesocket(){
     try{
     Socket s = null; //Declaro o socket cliente
     PrintStream ps = null;//Declaro a Stream de saida de dados
     s = new Socket("ip",porta); //Cria o socket com o recurso desejado na porta especificada
     ps = new PrintStream(s.getOutputStream()); //Cria a Stream de saida de dados
     ps.println(this.getpagina());
     s.close();
     }
     catch(IOException e){
         System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket.");
     }
   }

Mais uma coisa, fiz isso baseado na documentação do guj, pergunta o que eu sou cliente ou servidor ?
Pois quando faço download eu pego e passo a url e recebo a pagina.

3 Respostas

rigolin

Primeira coisa… qual protocolo o proxy fala? TCP ou HTTP?

aszarael

HTTP, ele se utiliza da biblioteca do internet explorer

Daniel_Quirino_Olive

Este privox é um proxy?

SE ele for um proxy e se você precisar de autorização para que suas requisições saiam para a internet, então você precisa criar um java.net.Authenticator. É bem simples:

import java.net.Authenticator;
import java.net.PasswordAuthentication;


final class HTTPAuthenticator extends Authenticator {
	
	private String username, password;
	
	public HTTPAuthenticator(String username, String password) throws IllegalArgumentException{
		if((username == null) 
				|| (password == null)
				|| "".equals(username)
				|| "".equals(password)){
			throw new IllegalArgumentException();
		}
		this.username = username;
		this.password = password;
	}

	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
    	return new PasswordAuthentication(username, password.toCharArray());
    }

	
	
}

A partir disso, antes de você abrir qualquer socket, você define o seu autenticador como o padrão para conexões.

HTTPAuthenticator authenticator = new HTTPAuthenticator(username, password);
Authenticator.setDefault(authenticator);

E é só.

Criado 31 de outubro de 2006
Ultima resposta 1 de nov. de 2006
Respostas 3
Participantes 3