===java怎样访问需要登录才能查看的网页????急!!=== 应该可以的,别的语言都没有问题,java也应该可以。这种认证方式是通过客户端的cookie实现的,java也可以发送cookie,但是就是不知道发送哪些cookie,不知道有没有人做过??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用httpunit包http://www.httpunit.org/下有 下面是一个通过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(); } }} 楼上的,要是我要访问其他需要登录才能查看的页面而不是登录的那个页面呢?比如我要通过java程序访问“我得分的问题”这个页面? > 楼上的,要是我要访问其他需要登录才能查看的页面而不是登录的那个页面呢?> 不是比如我要通过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(); } }}就可以了。 楼上的大哥,我得分的页面即http://www.csdn.net/Expert/Forum.asp?TypeNum=6&roomid=0会先检查请求的客户有没有指定的cookie,以此来判断用户是否登录过,而如果用浏览器访问,浏览器会自动发送这个站点的cookie,而用你的那段程序,是不会在http请求头信息中加入cookie的,所以是不可能访问到的,得到的将只是一个重定向的页面(比如要求登录)。我现在就是不知道,如何向服务器自动发送该服务器的所有cookies。不知道有没有说明白,我的email:[email protected],欢迎来信指教!分不够再加! 付上一个发送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(); } }} 求过路人给个建议,关于初学struts的苦恼~ java反射方法参数的问题 求JTREE的一段代码 怎么使组件自动填充JPanel 关于工程合并的问题,请高手指点 Dead store to local variable??不理解,HELP。 关于类、对象、变量、方法的问题。 JFrame和JDialog有何区别? 奇葩正则表达式求解 如何获取一个随机数? 如何安装class包 极简单问题:安装了jdk1.2.1后该怎么配置系统启动文件????
http://www.httpunit.org/下有
----------------------------------------------------
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();
}
}
}
> 不是比如我要通过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();
}
}
}就可以了。
http://www.csdn.net/Expert/Forum.asp?TypeNum=6&roomid=0会先检查请求的客户有没有指定的cookie,以此来判断用户是否登录过,而如果用浏览器访问,浏览器会自动发送这个站点的cookie,而用你的那段程序,是不会在http请求头信息中加入cookie的,所以是不可能访问到的,得到的将只是一个重定向的页面(比如要求登录)。我现在就是不知道,如何向服务器自动发送该服务器的所有cookies。不知道有没有说明白,我的email:[email protected],欢迎来信指教!分不够再加!
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();
}
}
}