日期:2014-05-20  浏览次数:20790 次

使用httpclient连接tomcat管理页问题,遇到过的请帮忙作答,谢谢!
用httpclient模拟实现用浏览器访问tomcat的管理页面,好像需要经过 HTTP Basic 认证。参考了http://www.ibm.com/developerworks/cn/java/j-lo-httpclient-j2ee/#N10060。但老是连接不成功。不是何原因?
代码如下:
Java code

import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.UsernamePasswordCredentials; 

public class GetSample {
    public static void main(String[] args) {
        //构造HttpClient的实例
        HttpClient httpClient = new HttpClient();
        
        httpClient.getState().setCredentials( new AuthScope("http://10.75.72.229", 8080, null), new UsernamePasswordCredentials("admin", "admin"));//10.75.72.229不是本机
        //httpClient.getState().setCredentials( null ,"http://10.75.72.229:8080/manager/status" , new UsernamePasswordCredentials( "admin" , "admin" ) );
        httpClient.getParams().setAuthenticationPreemptive(true);


        //创建GET方法的实例
        GetMethod getMethod = new GetMethod("http://10.75.72.229:8080/manager/status?XML=true");
        getMethod.setDoAuthentication( true );
        //使用系统提供的默认的恢复策略
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
        try {
            //执行getMethod
            int statusCode = httpClient.executeMethod(getMethod);
            if (statusCode != HttpStatus.SC_OK) {
                System.err.println("Method failed: " + getMethod.getStatusLine());
            }
            //读取内容 
            byte[] responseBody = getMethod.getResponseBody();
            //处理内容
            System.out.println(new String(responseBody));
        }
        catch (HttpException e) {
            //发生致命的异常,可能是协议不对或者返回的内容有问题
            System.out.println("Please check your provided http address!");
            e.printStackTrace();
        }
        catch (IOException e) {
            //发生网络异常
            e.printStackTrace();
        }
        finally {
            //释放连接
            getMethod.releaseConnection();
        }
    }
}


报错如下
2008-7-1 9:49:31 org.apache.commons.httpclient.HttpMethodDirector authenticateHost
警告: Required credentials not available for BASIC <any realm>@10.75.72.229:8080
2008-7-1 9:49:31 org.apache.commons.httpclient.HttpMethodDirector authenticateHost
警告: Preemptive authentication requested but no default credentials available
2008-7-1 9:49:31 org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
信息: basic authentication scheme selected
2008-7-1 9:49:31 org.apache.commons.httpclient.HttpMethodDirector processWWWAuthChallenge
信息: Failure authenticating with BASIC 'Tomcat Manager Application'@10.75.72.229:8080
Method failed: HTTP/1.1 401 
2008-7-1 9:49:31 org.apache.commons.httpclient.HttpMethodBase getResponseBody
警告: Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements. See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License. You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,