You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by Jason Novotny <no...@aei.mpg.de> on 2004/10/02 20:16:56 UTC
convert usage if URLConnection to HttpClient
Hi,
I had been using some crufty code using URLConnection to perform
basic auth to retrieve the list of applications using the Tomcat manager
webapp. I'd like to convert this to use commons-httpclient-2.0.1.
It should be pretty simple I think-- what is required is to invoke
http://127.0.0.1/manager?list performing basic authentication using name
and password and then I get back a response which has a specific format.
My current code is shown below and I'd like to know what the 3 or 5
magic lines are to do the same thing using HttpClient.
Thanks very much, Jason
try {
String serverName = req.getServerName();
int serverPort = req.getServerPort();
URL u = new URL("http://" + serverName + ":" + serverPort +
"/manager" + command);
URLConnection con = u.openConnection();
String up = USERNAME + ":" + PASSWORD;
String encoding = null;
// check to see if sun's Base64 encoder is available.
try {
sun.misc.BASE64Encoder encoder =
(sun.misc.BASE64Encoder)
Class.forName("sun.misc.BASE64Encoder").newInstance();
encoding = encoder.encode(up.getBytes());
} catch (Exception ex) { // sun's base64 encoder isn't available
throw new TomcatManagerException("No
sun.misc.BASE64Encoder availoable in JDK!");
}
con.setRequestProperty("Authorization", "Basic " + encoding);
con.setDoInput(true);
con.setUseCaches(false);
con.connect();
if (con instanceof HttpURLConnection) {
HttpURLConnection httpConnection = (HttpURLConnection) con;
// test for 401 result (HTTP only)
if (httpConnection.getResponseCode() ==
HttpURLConnection.HTTP_UNAUTHORIZED) {
throw new TomcatManagerException("HTTP Authorization
failure!");
}
}
BufferedReader reader = new BufferedReader(new
InputStreamReader(con.getInputStream()));
// get first line
// should be something like:
// OK - some information text
String line = null;
line = reader.readLine();
StringTokenizer tokenizer = new StringTokenizer(line, "-");
if (tokenizer.countTokens() == 2) {
String rc = tokenizer.nextToken();
String description = tokenizer.nextToken();
result = new TomcatWebAppResult(rc, description);
}
while ((line = reader.readLine()) != null) {
result.addWebAppDescriptor(line);
}
reader.close();
} catch (IOException e) {
throw new TomcatManagerException("Unable to perform command:
", e);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org
Re: convert usage if URLConnection to HttpClient
Posted by Michael Becke <be...@u.washington.edu>.
Hi Jason,
Please have a look at the HttpClient authentication guide
<http://jakarta.apache.org/commons/httpclient/authentication.html> and
the basic authentication example
<http://cvs.apache.org/viewcvs.cgi/jakarta-commons/httpclient/src/
examples/BasicAuthenticationExample.java?
rev=1.1.2.3&only_with_tag=HTTPCLIENT_2_0_BRANCH>. These should clear
up any questions you may have. Please let us know if you run into any
trouble.
Mike
On Oct 2, 2004, at 2:16 PM, Jason Novotny wrote:
>
> Hi,
>
> I had been using some crufty code using URLConnection to perform
> basic auth to retrieve the list of applications using the Tomcat
> manager webapp. I'd like to convert this to use
> commons-httpclient-2.0.1.
>
> It should be pretty simple I think-- what is required is to invoke
> http://127.0.0.1/manager?list performing basic authentication using
> name and password and then I get back a response which has a specific
> format.
> My current code is shown below and I'd like to know what the 3 or 5
> magic lines are to do the same thing using HttpClient.
>
> Thanks very much, Jason
>
> try {
> String serverName = req.getServerName();
> int serverPort = req.getServerPort();
> URL u = new URL("http://" + serverName + ":" + serverPort +
> "/manager" + command);
> URLConnection con = u.openConnection();
>
> String up = USERNAME + ":" + PASSWORD;
> String encoding = null;
> // check to see if sun's Base64 encoder is available.
> try {
> sun.misc.BASE64Encoder encoder =
> (sun.misc.BASE64Encoder)
>
> Class.forName("sun.misc.BASE64Encoder").newInstance();
> encoding = encoder.encode(up.getBytes());
> } catch (Exception ex) { // sun's base64 encoder isn't
> available
> throw new TomcatManagerException("No
> sun.misc.BASE64Encoder availoable in JDK!");
> }
>
> con.setRequestProperty("Authorization", "Basic " +
> encoding);
> con.setDoInput(true);
> con.setUseCaches(false);
> con.connect();
>
> if (con instanceof HttpURLConnection) {
> HttpURLConnection httpConnection = (HttpURLConnection)
> con;
> // test for 401 result (HTTP only)
> if (httpConnection.getResponseCode() ==
> HttpURLConnection.HTTP_UNAUTHORIZED) {
> throw new TomcatManagerException("HTTP
> Authorization failure!");
> }
> }
>
> BufferedReader reader = new BufferedReader(new
> InputStreamReader(con.getInputStream()));
>
> // get first line
> // should be something like:
> // OK - some information text
> String line = null;
>
> line = reader.readLine();
> StringTokenizer tokenizer = new StringTokenizer(line, "-");
> if (tokenizer.countTokens() == 2) {
> String rc = tokenizer.nextToken();
> String description = tokenizer.nextToken();
> result = new TomcatWebAppResult(rc, description);
> }
>
> while ((line = reader.readLine()) != null) {
> result.addWebAppDescriptor(line);
> }
> reader.close();
>
> } catch (IOException e) {
> throw new TomcatManagerException("Unable to perform
> command: ", e);
> }
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> commons-httpclient-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail:
> commons-httpclient-dev-help@jakarta.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org
Re: convert usage if URLConnection to HttpClient
Posted by Oleg Kalnichevski <ol...@apache.org>.
Jason,
Take a look at the HttpClient tutorial and the authentication guide.
That should get you started:
http://jakarta.apache.org/commons/httpclient/tutorial.html
http://jakarta.apache.org/commons/httpclient/authentication.html
Same code can be found here:
http://cvs.apache.org/viewcvs.cgi/jakarta-commons/httpclient/src/examples/BasicAuthenticationExample.java?rev=1.1.2.3&only_with_tag=HTTPCLIENT_2_0_BRANCH&view=markup
If all this will not help, let me know
Oleg
On Sat, 2004-10-02 at 20:16, Jason Novotny wrote:
> Hi,
>
> I had been using some crufty code using URLConnection to perform
> basic auth to retrieve the list of applications using the Tomcat manager
> webapp. I'd like to convert this to use commons-httpclient-2.0.1.
>
> It should be pretty simple I think-- what is required is to invoke
> http://127.0.0.1/manager?list performing basic authentication using name
> and password and then I get back a response which has a specific format.
> My current code is shown below and I'd like to know what the 3 or 5
> magic lines are to do the same thing using HttpClient.
>
> Thanks very much, Jason
>
> try {
> String serverName = req.getServerName();
> int serverPort = req.getServerPort();
> URL u = new URL("http://" + serverName + ":" + serverPort +
> "/manager" + command);
> URLConnection con = u.openConnection();
>
> String up = USERNAME + ":" + PASSWORD;
> String encoding = null;
> // check to see if sun's Base64 encoder is available.
> try {
> sun.misc.BASE64Encoder encoder =
> (sun.misc.BASE64Encoder)
>
> Class.forName("sun.misc.BASE64Encoder").newInstance();
> encoding = encoder.encode(up.getBytes());
> } catch (Exception ex) { // sun's base64 encoder isn't available
> throw new TomcatManagerException("No
> sun.misc.BASE64Encoder availoable in JDK!");
> }
>
> con.setRequestProperty("Authorization", "Basic " + encoding);
> con.setDoInput(true);
> con.setUseCaches(false);
> con.connect();
>
> if (con instanceof HttpURLConnection) {
> HttpURLConnection httpConnection = (HttpURLConnection) con;
> // test for 401 result (HTTP only)
> if (httpConnection.getResponseCode() ==
> HttpURLConnection.HTTP_UNAUTHORIZED) {
> throw new TomcatManagerException("HTTP Authorization
> failure!");
> }
> }
>
> BufferedReader reader = new BufferedReader(new
> InputStreamReader(con.getInputStream()));
>
> // get first line
> // should be something like:
> // OK - some information text
> String line = null;
>
> line = reader.readLine();
> StringTokenizer tokenizer = new StringTokenizer(line, "-");
> if (tokenizer.countTokens() == 2) {
> String rc = tokenizer.nextToken();
> String description = tokenizer.nextToken();
> result = new TomcatWebAppResult(rc, description);
> }
>
> while ((line = reader.readLine()) != null) {
> result.addWebAppDescriptor(line);
> }
> reader.close();
>
> } catch (IOException e) {
> throw new TomcatManagerException("Unable to perform command:
> ", e);
> }
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org