Como acessar uma Servlet via socket ou HTTP?[RESOLVIDO]

Eai galera…preciso executar uma servlet de um JFRAME…Esta minha servlet é um Web Script…aquelas servlets que executam javascripts no servidor!!!

por exemplo:

http://localhost:8080/alfresco/command/script/execute?scriptPath=/Company%20Home/listActions.js

Eu passo o parametro scriptPath, onde se encontra o javascript listActions

Já tentei:

[code]String hostname = null;
String autentica = “admin:admin”;

	try {

hostname = “localhost”;
String data = URLEncoder.encode(“scriptPath”, “UTF-8”) + “=” + URLEncoder.encode("/Company%20Home/Teste/workflow.js", “UTF-8”);
int port = 8080;
InetAddress addr = InetAddress.getByName(hostname);
Socket socket = new Socket(addr, port);
String path = “/alfresco/command/script/execute”;

BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), “UTF8”));
wr.write(“POST “+path+” HTTP/1.0\r\n”);
wr.write(“Proxy-Authorization: Basic "
+ new sun.misc.BASE64Encoder().encode(
autentica.getBytes())
+ “\r\n\r\n”);
wr.write(“Content-Length: “+data.length()+”\r\n”);
wr.write(“Content-Type: application/x-www-form-urlencoded\r\n”);
wr.write(”\r\n");
wr.write(data);
wr.flush();

BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println(rd.readLine());
}
wr.close();
rd.close();
//wf.fechaSessao();
}catch ( UnknownHostException eh )
{
eh.printStackTrace();
System.exit( 1 ) ;
}[/code]

Quando eu executo (no log) dá acesso negado…provavelmente precisa ser feita uma autenticação…mas não consigo implementar

wr.write("Proxy-Authorization: Basic "+ new sun.misc.BASE64Encoder().encode(autentica.getBytes())+"\r\n\r\n");

direito…alguem tem alguma solução?

Vlw

InputStream stream = new URL("http://www.google.com.br").openStream();

[EDIT] Ops, foi mal, eu tinha entendido outra coisa bem diferente.

Eai Galera…alguma ideia???

Valeu!! :?

Pesquise por HttpComponents da Apache:
http://hc.apache.org/

Mais especificamente por HttpClient:
http://hc.apache.org/httpclient-3.x/index.html

Não posso dar mais informações, visto que nunca utilizei a ferramenta, mas ela resolverá seu problema.

Nossa que coincidencia isso, tava procurando por algo do tipo hj e tou travado com a mesma coisa.
Eu tentei primeiro com a classe Authenticator e nada… depois tentei desse mesmo jeito q vc fez e por aqui deu um erro http 503.
Quem puder ajudar eu ia ficar bem feliz.

E não vem dar dica de frameworks ou pacotes mágicos pra vc fazer uma conexao http pq isso nao eh nem uma coisa de outro mundo pelamor de deus.

http://www.guj.com.br/java.tutorial.artigo.5.1.guj

Como utilizar autenticação…por exemplo:

http://admin:admin@localhost:8080/alfresco/command/script/execute?scriptPath=/Company%20Home/listActions.js

Isto funciona no firefox!!!..como implemento isto com a request HTTP ?

Usei o exemplo do guilherme http://www.guj.com.br/content/articles/http/HttpTest.java…implementando autorização…mas via codigo ele nao acha!!

[code]public class HttpTest {

	private static void printResults(HttpURLConnection con, PrintWriter out)
	throws IOException {

	// abre a conexao pra input
	BufferedReader br =
		new BufferedReader(new InputStreamReader(con.getInputStream()));

	// le ate o final
	StringBuffer newData = new StringBuffer(1000);
	String s = "";
	while (null != ((s = br.readLine()))) {
		newData.append(s);
	}
	br.close();

	// imprime o codigo resultante
	out.println(new String(newData));

	// imprime o numero do resultado
	out.println(
		"Resultado: "
			+ con.getResponseCode()
			+ "/"
			+ con.getResponseMessage());

}

/**
 * Funcao principal
 * 
 * @param args	os argumentos da linha de comando
 */
public static void main(String[] args) {

			String urlString = "http://localhost:8080/alfresco/command/script/execute";
	
	
	
			try {

		// os parametros
		Properties parameters = new Properties();
		parameters.setProperty("scriptPath", "/Company%20Home/listActions.js");
					
		// se for o proxy host
		//System.setProperty("http.proxyHost", "10.1.1.1");
		//System.setProperty("http.proxyPort", "8080");

		// o interador
		Iterator i = parameters.keySet().iterator();
		// o contador
		int counter = 0;

		// enquanto ainda existir parametros
		while (i.hasNext()) {

			// pega o nome
			String name = (String) i.next();
			// pega o valor
			String value = parameters.getProperty(name);

			// adiciona com um conector (? ou &)
			urlString += (++counter == 1 ? "?" : "&") + name + "=" + value;

		}

		// cria o objeto
		System.out.println("Url: " + urlString);
		URL url = new URL(urlString);

		// cria o objeto httpurlconnection
		HttpURLConnection connection =
			(HttpURLConnection) url.openConnection();

		// seta o metodo
		connection.setRequestProperty("Request-Method", "GET");
		connection.setRequestProperty("Authorization", "Basic " + encode("admin" + ":"+ "admin"));

		// seta a variavel para ler o resultado
		connection.setDoInput(true);
		connection.setDoOutput(false);

		// conecta com a url destino
		connection.connect();

		// mostra os resultados na saida padrao
		printResults(connection, new PrintWriter(System.out, true));
		

	} catch (MalformedURLException ex) {
		// se a url for invalida
		System.err.println("Error: Invalid url: " + urlString);
	} catch (IOException ex) {
		// se ocorrer um erro de io
		ex.printStackTrace();
	}

}
public static String encode (String source) {
	  BASE64Encoder enc = new sun.misc.BASE64Encoder();
	  return(enc.encode(source.getBytes()));
	 }

}[/code]

Dah o seguinte erro!!

Url: http://localhost:8080/alfresco/command/script/execute?scriptPath=/Company%20Home/listActions.js java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/alfresco/command/script/execute?scriptPath=/Company%20Home/listActions.js at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at org.ktex.app.HttpTest.printResults(HttpTest.java:34) at org.ktex.app.HttpTest.main(HttpTest.java:126)

O engraçado que via browser ele funciona…mas só depois de autenticar!!

vc tentou usar o httpclient da apache ? eu ja utilizei ele quando era necessário basic authentication e foi show de bola.

existe outro motivo pelo qual a aplicação daria problema? cookies? headers? uma aspa no lugar errado?

Consegui…galera!!

[code]public static void main(String[] args) {

	               String urlString= "http://localhost:8080/alfresco/command/script/execute";
	
	
	
			try {

		// os parametros
		Properties parameters = new Properties();
		parameters.setProperty("scriptPath", "\\Company%20Home\\listActions.js");
					
					// o interador
		Iterator i = parameters.keySet().iterator();
		// o contador
		int counter = 0;

		// enquanto ainda existir parametros
		while (i.hasNext()) {

			// pega o nome
			String name = (String) i.next();
			// pega o valor
			String value = parameters.getProperty(name);

			// adiciona com um conector (? ou &)
			urlString += (++counter == 1 ? "?" : "&") + name + "=" + value;

		}

		// cria o objeto
		System.out.println("Url: " + urlString);
		URL url = new URL(urlString);

		// cria o objeto httpurlconnection
		HttpURLConnection connection =
			(HttpURLConnection) url.openConnection();

		// seta o metodo
		connection.setRequestMethod("GET");
		connection.setRequestProperty("Authorization", "Basic " + encode("admin" + ":"+ "admin"));
		connection.setRequestProperty("Content-type", "text/html; charset=iso-8859-1");
		
		// seta a variavel para ler o resultado
		connection.setDoInput(true);
		connection.setDoOutput(false);

		// conecta com a url destino
		connection.connect();

		// mostra os resultados na saida padrao
		printResults(connection, new PrintWriter(System.out, true));
		

	} catch (MalformedURLException ex) {
		// se a url for invalida
		System.err.println("Error: Invalid url: " + urlString);
	} catch (IOException ex) {
		// se ocorrer um erro de io
		ex.printStackTrace();
	}

}
public static String encode (String source) {
	  BASE64Encoder enc = new sun.misc.BASE64Encoder();
	  return(enc.encode(source.getBytes()));
	 }

}[/code]

Eu estava escrevendo errado o parametro do scriptPath…

Estava assim:

parameters.setProperty("scriptPath", "/Company%20Home/listActions.js");   

E agora ficou assim:

parameters.setProperty("scriptPath", "\\Company%20Home\\listActions.js");

E tambem implementei:

connection.setRequestMethod("GET"); connection.setRequestProperty("Authorization", "Basic " + encode("admin" + ":"+ "admin")); connection.setRequestProperty("Content-type", "text/html; charset=iso-8859-1");

Vlw!! 8)