应该可以的,别的语言都没有问题,java也应该可以。这种认证方式是通过客户端的cookie实现的,java也可以发送cookie,但是就是不知道发送哪些cookie,不知道有没有人做过???

解决方案 »

  1.   

    可以用httpunit包
    http://www.httpunit.org/下有
      

  2.   

    下面是一个通过POST访问CSDN的登录页面的例子.将程序中的Your ID和Your Password改成你的ID和密码,即可看到返回的HTML原码.如果你是在Proxy后面执行这个程序,可以在命令行中指定Proxy设定.Proxy设定例子:
    ----------------------------------------------------
    java -DproxySet=true -DproxyHost=proxyhost [-DproxyPort=portNumber] HttpPost样本程序:
    ----------------------------------------------------
    import java.io.*;
    import java.util.*;
    import java.net.*;public class HttpPost {
        public static void main(String[] args) {
            try {
                URL url = new URL("http://www.csdn.net/member/logon.asp");
                String post = "name=" + URLEncoder.encode("Your ID")
                            + "&pass=" + URLEncoder.encode("Your password")
                            + "&type=" + URLEncoder.encode("1");            URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                PrintStream out = new PrintStream(conn.getOutputStream());
                out.print(post);
                out.close();            BufferedReader in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));            String sLine;
                while(true) {
                    sLine = in.readLine();
                    if(sLine == null) break;
                    System.out.println(sLine);
                }
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
      

  3.   

    楼上的,要是我要访问其他需要登录才能查看的页面而不是登录的那个页面呢?比如我要通过java程序访问“我得分的问题”这个页面?
      

  4.   

    > 楼上的,要是我要访问其他需要登录才能查看的页面而不是登录的那个页面呢?
    > 不是比如我要通过java程序访问“我得分的问题”这个页面?那就更简单了.你说的“我得分的问题”的URL是
    http://www.csdn.net/Expert/Forum.asp?TypeNum=6&roomid=0吧。
    所以估计服务器端用的是GET.所以我们只要把HttpPost改成:import java.io.*;
    import java.util.*;
    import java.net.*;public class HttpGet {
        public static void main(String[] args) {
            try {
                URL url = new URL("http://www.csdn.net/Expert/Forum.asp?TypeNum=6&roomid=0");            URLConnection conn = url.openConnection();            BufferedReader in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));            String sLine;
                while(true) {
                    sLine = in.readLine();
                    if(sLine == null) break;
                    System.out.println(sLine);
                }
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }就可以了。
      

  5.   

    楼上的大哥,我得分的页面即
    http://www.csdn.net/Expert/Forum.asp?TypeNum=6&roomid=0会先检查请求的客户有没有指定的cookie,以此来判断用户是否登录过,而如果用浏览器访问,浏览器会自动发送这个站点的cookie,而用你的那段程序,是不会在http请求头信息中加入cookie的,所以是不可能访问到的,得到的将只是一个重定向的页面(比如要求登录)。我现在就是不知道,如何向服务器自动发送该服务器的所有cookies。不知道有没有说明白,我的email:[email protected],欢迎来信指教!分不够再加!
      

  6.   

    付上一个发送cookie给服务器的样本程序。写得不好请见谅。至于你说的那个页面需要哪些cookie,我不便在这里写出,怕版主会把我开除掉。你可以用Windows2000 Server中的Network Monitor或tcpdump之类的工具,查看用IE访问时都往服务器发送了哪些cookie。如果你不知道这些工具怎么用,可以来e-mail交流。import java.io.*;
    import java.util.*;
    import java.net.*;public class HttpCookie {
        // Simple Header
        private final static String[] header = {"GET /test.asp HTTP/1.1",
            "Host: localhost",
            "Cookie: name=Your_ID;pass=Your_Password;xkey=xvalue;",
            ""};    public static void main(String[] args) {
            try {
                Socket socket = new Socket("localhost", 80);
                socket.setSoTimeout(600);            // send request
                System.out.println("-------------- REQUEST -----------------");
                PrintWriter out = new PrintWriter(socket.getOutputStream());
                for(int i=0; i<header.length; i++) {
                    System.out.println(header[i]);
                    out.println(header[i]);
                    out.flush();
                }            System.out.println("-------------- RESPONSE -----------------");
                String sLine = "";
                BufferedReader in = new BufferedReader(
                        new InputStreamReader(socket.getInputStream()));
                while( true ) {
                    try {
                        sLine = in.readLine();
                    } catch (Exception e) {
                        //Socket read time out
                        break;
                    }
                    if(sLine == null) break;
                    System.out.println(sLine);
                }            // close socket
                in.close();
                out.close();
                socket.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }