本帖最后由 paodan 于 2010-03-01 19:17:07 编辑

解决方案 »

  1.   

    http://www.wangchao.net.cn/bbsdetail_39470.html
     lz 可以看看
      

  2.   


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;public class HttpURLConnectionTest {
    public static void testConnect(String surl) throws IOException {
    URL url = new URL(surl);
    String userInfo = url.getUserInfo();
    if (userInfo != null && userInfo.length() > 0) {
    String string = surl.replace(userInfo, "");
    url = new URL(string);
    }
    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); if (userInfo != null && userInfo.length() > 0)
    connection.setRequestProperty("Authorization", userInfo);
    connection.connect();
    System.out.println(connection.getResponseCode());//如果hhtp服务器不需要验证,输出200 }
    public static void testConnect2(String surl) throws IOException {
    URL url = new URL(surl);
    String userInfo = url.getUserInfo();
    if (userInfo != null && userInfo.length() > 0) {
    String string = surl.replace(userInfo, "");
    url = new URL(string);
    }
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    StringBuffer sb = new StringBuffer();
    sb.append("userName=" + "aaa");
    sb.append("&password=" + "bbb");
    //post信息
    OutputStream os = connection.getOutputStream();
    os.write(sb.toString().getBytes("GBK"));
    os.close();
    connection.connect();
    System.out.println(connection.getResponseCode());//如果hhtp服务器需要验证时,输出401 }
    public static void main(String args[]) throws IOException {
    String url = "http://192.9.168.11:1122/";
    testConnect(url);
    //testConnect2(url);

    }}如果没有密码时输出200,有密码时输出401,如何发送用户名和密码?
      

  3.   

    如果hhtp服务器需要验证时,输出401
    改正:如果http服务器需要验证时,输出401
      

  4.   

    HttpURLConnection是如何发送用户名和密码的?
      

  5.   

    可以将用户名和密码写在URL中,用username= &password= 
      

  6.   

    HttpURLConnection.HTTP_OK==httpConn.getResponseCode();
    它们相等,就是成功连接!
      

  7.   

    试了"http://username=aa&[email protected]:1122/";不行,输出401
      

  8.   

    HttpURLConnection.HTTP_OK==httpConn.getResponseCode();
    它们相等,就是成功连接!
      

  9.   

    这只是检测url和端口是否正确,如果有用户名和密码的如何连接,即如何发送用户名和密码?
      

  10.   

    调用connect方法,没有捕获到异常就是连接上了
      

  11.   

    这里再说明一下,可以参考一下7楼的代码,对于Http服务器(IIS或者Apache等),如果url和端口正确,都会返回200,也就是说不管Http服务器是否需要用户认证,只要是http://url:端口正确,返回码都会是200.
      

  12.   

    因此想请教一下如果http服务器需要认证的,如何传递认证信息(用户名和密码),除了返回200,还会返回什么有用的信息(与不需要认证的区别信息)?
      

  13.   

    public static boolean isConnectedUrl(String url) {
    HttpURLConnection con;
    try {
    HttpURLConnection.setFollowRedirects(false);
    con = (HttpURLConnection) new URL(url)
    .openConnection();
    con.setRequestMethod("HEAD");
    System.out.println("state code:" + con.getResponseCode());
    if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
    return true;
    }
    } catch (MalformedURLException e) {
    e.printStackTrace();
    return false;
    } catch (IOException e) {
    e.printStackTrace();
    return false;
    }
    return false;
    }
      

  14.   

    谢谢,这个方法用过,对于需要认证的Http服务器url格式是怎么样的?比如http://192.168.200.9:8002,用户名和密码为user/paswwd,试过这样的http://user:[email protected]:8002,但是返回了401,连接失败。不知道如何发送认证信息。
      

  15.   

    可以看下这个:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.Authenticator;
    import java.net.InetAddress;
    import java.net.PasswordAuthentication;
    import java.net.URL;public class Test {
      public static void main(String[] argv) throws Exception {
        Authenticator.setDefault(new MyAuthenticator());
        URL url = new URL("http://hostname:80/index.html");    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
        String str;
        while ((str = in.readLine()) != null) {
          System.out.println(str);
        }
        in.close();
      }
    }class MyAuthenticator extends Authenticator {
      
      protected PasswordAuthentication getPasswordAuthentication() {
        String promptString = getRequestingPrompt();
        System.out.println(promptString);
        String hostname = getRequestingHost();
        System.out.println(hostname);
        InetAddress ipaddr = getRequestingSite();
        System.out.println(ipaddr);
        int port = getRequestingPort();    String username = "name";
        String password = "password";
        return new PasswordAuthentication(username, password.toCharArray());
      }
    }
      

  16.   

    这个可以,稍微修改一下就行,还有需要设置一下流的字符编码,html中带有汉字的连接显示乱码,因此需要根据不同的页面设置编码。import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.Authenticator;
    import java.net.InetAddress;
    import java.net.PasswordAuthentication;
    import java.net.URL;
    /**
     * TODO javadoc for http.AuthenticatorTest
     * 
     * @author wanghan
     */
    public class AuthenticatorTest {
    public static void main(String[] argv) throws Exception {
        Authenticator.setDefault(new MyAuthenticator("user","passwd"));
        URL url = new URL("http://192.168.200.10:8002");     BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));//这里根据服务器编码设置
        String str;
        while ((str = in.readLine()) != null) {
          System.out.println(str);
        }
        in.close();
      }
    }
    class MyAuthenticator extends Authenticator {
    private String name;
    private String passwd;
    public MyAuthenticator(String name,String passwd){
    this.name = name;
    this.passwd = passwd;
    }
      
      protected PasswordAuthentication getPasswordAuthentication() {
        String promptString = getRequestingPrompt();
        System.out.println(promptString);
        String hostname = getRequestingHost();
        System.out.println(hostname);
        InetAddress ipaddr = getRequestingSite();
        System.out.println(ipaddr);
        //int port = getRequestingPort();     String username = name;
        String password = passwd;
        return new PasswordAuthentication(username, password.toCharArray());
      }
    }
      

  17.   

    谢谢35楼,用35楼的方法可以通过认证,我之前用HttpClient 认证一直没有成功。
      

  18.   

    System.out.println("state code:" + con.getResponseCode());
    我这里直接出错。没打印出来