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

9 respostas
R

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:

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 ) ;
		}

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

9 Respostas

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

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

R

Eai Galera…alguma ideia???

Valeu!! :?

R

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.

M

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.

P

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

R

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 ?

R

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

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()));
		 }


}

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!!

P

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?

R

Consegui......galera!!

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()));
		 }


}

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)

Criado 1 de fevereiro de 2008
Ultima resposta 7 de fev. de 2008
Respostas 9
Participantes 5