正在学习socket,但不知怎么才能接收到第二张主页面,哪位大兄帮忙看看
接收安装在我电脑的一个邮件服务器的主页面import java.net.*;
import java.io.*;
public class HTTPClient {
public static void main(String args[])throws Exception{
Socket socket=new Socket("localhost",6080);
String frontOfRequest="GET ";
String URL="/admin/login.php?f_user=admin&f_pass=123";
String endOfRequest=" HTTP/1.1\r\n"
+"Host: localhost\r\n"
+"Accept: */*\r\n"
+"Accept-Language: zh-cn\r\n"
+"Accept-Encoding: gzip, deflate\r\n"
+"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n"
+"Connection: Keep-Alive\r\n";
String cookie=null; OutputStream socketOut=socket.getOutputStream();
PrintWriter pw=new PrintWriter(socketOut,true);
pw.println(frontOfRequest+URL+endOfRequest); InputStream socketIn=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(socketIn));
String data;
int line=1;
while((data=br.readLine())!=null){
switch(line){
case 4:cookie=data.substring(4)+"\r\n";break;
case 5:cookie=cookie+data.substring(4)+"\r\n";break;
case 6:cookie=cookie+data.substring(4)+"\r\n";break;
}
line++;
System.out.println(data);
} URL="/admin/main.php";
pw.println(frontOfRequest+URL+endOfRequest+cookie);
while((data=br.readLine())!=null){
System.out.println(data);
}
socket.close();
}
}返回来的结果是
HTTP/1.1 200 OK
Date: Wed, 28 Oct 2009 02:50:30 GMT
Server: Apache
Set-Cookie: magicwinmail_admin_default_language=ch_gb; expires=Friday, 27-Nov-09 02:50:30 GMT
Set-Cookie: magicwinmail_admin_errorpwd_retry=deleted; expires=Tuesday, 28-Oct-08 02:50:29 GMT
Set-Cookie: magicwinmail_admin_errorpwd_times=deleted; expires=Tuesday, 28-Oct-08 02:50:29 GMT
Content-Encoding: gzip
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html161
?
|Q=O?湅?0瀈H?-j軄????槐冧バ?w鑴梬黛;輠蝟6镫鈑縀O烹?w蟢?B>?!沚/f閤倞枡N伈?刲唣犏*棤
洝
苶錤从结果看是第一个请求得到了响应,但第二次请求main.php时没有响应,是第二次的消息没有发出去还是没有接收到东西呢,就算是错误消息都没有给我一个还有就是怎么会是乱码啊正文,这里面又没有什么特殊字符的,如果换成下面这样就不是乱码了
URL url=new URL("http://localhost:6080/admin/login.php?f_user=admin&f_pass=123");
InputStream in=url.openStream();
InputStreamReader inputStreamReader=new InputStreamReader(in);
BufferedReader br=new BufferedReader(inputStreamReader);
String temp=null;
while((temp=br.readLine())!=null){
System.out.println(temp);
}
返回结果就不是乱码的了,不过这两种都是inputStream啊,只是改成了用URL类来发送,是我发送的协议存在问题?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<form name="form1" action="main.php" method=post>
<input type=hidden name=sid value="285774ae7b31da030f">
<input type=hidden name=lid value="0">
</form> <br>
<h3>Loading...</h3>
</body><script language="Javascript">
document.form1.submit();
</script></html>总之让我把main.php这张页面给取到啊,急死个人了
接收安装在我电脑的一个邮件服务器的主页面import java.net.*;
import java.io.*;
public class HTTPClient {
public static void main(String args[])throws Exception{
Socket socket=new Socket("localhost",6080);
String frontOfRequest="GET ";
String URL="/admin/login.php?f_user=admin&f_pass=123";
String endOfRequest=" HTTP/1.1\r\n"
+"Host: localhost\r\n"
+"Accept: */*\r\n"
+"Accept-Language: zh-cn\r\n"
+"Accept-Encoding: gzip, deflate\r\n"
+"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n"
+"Connection: Keep-Alive\r\n";
String cookie=null; OutputStream socketOut=socket.getOutputStream();
PrintWriter pw=new PrintWriter(socketOut,true);
pw.println(frontOfRequest+URL+endOfRequest); InputStream socketIn=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(socketIn));
String data;
int line=1;
while((data=br.readLine())!=null){
switch(line){
case 4:cookie=data.substring(4)+"\r\n";break;
case 5:cookie=cookie+data.substring(4)+"\r\n";break;
case 6:cookie=cookie+data.substring(4)+"\r\n";break;
}
line++;
System.out.println(data);
} URL="/admin/main.php";
pw.println(frontOfRequest+URL+endOfRequest+cookie);
while((data=br.readLine())!=null){
System.out.println(data);
}
socket.close();
}
}返回来的结果是
HTTP/1.1 200 OK
Date: Wed, 28 Oct 2009 02:50:30 GMT
Server: Apache
Set-Cookie: magicwinmail_admin_default_language=ch_gb; expires=Friday, 27-Nov-09 02:50:30 GMT
Set-Cookie: magicwinmail_admin_errorpwd_retry=deleted; expires=Tuesday, 28-Oct-08 02:50:29 GMT
Set-Cookie: magicwinmail_admin_errorpwd_times=deleted; expires=Tuesday, 28-Oct-08 02:50:29 GMT
Content-Encoding: gzip
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html161
?
|Q=O?湅?0瀈H?-j軄????槐冧バ?w鑴梬黛;輠蝟6镫鈑縀O烹?w蟢?B>?!沚/f閤倞枡N伈?刲唣犏*棤
洝
苶錤从结果看是第一个请求得到了响应,但第二次请求main.php时没有响应,是第二次的消息没有发出去还是没有接收到东西呢,就算是错误消息都没有给我一个还有就是怎么会是乱码啊正文,这里面又没有什么特殊字符的,如果换成下面这样就不是乱码了
URL url=new URL("http://localhost:6080/admin/login.php?f_user=admin&f_pass=123");
InputStream in=url.openStream();
InputStreamReader inputStreamReader=new InputStreamReader(in);
BufferedReader br=new BufferedReader(inputStreamReader);
String temp=null;
while((temp=br.readLine())!=null){
System.out.println(temp);
}
返回结果就不是乱码的了,不过这两种都是inputStream啊,只是改成了用URL类来发送,是我发送的协议存在问题?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<form name="form1" action="main.php" method=post>
<input type=hidden name=sid value="285774ae7b31da030f">
<input type=hidden name=lid value="0">
</form> <br>
<h3>Loading...</h3>
</body><script language="Javascript">
document.form1.submit();
</script></html>总之让我把main.php这张页面给取到啊,急死个人了
解决方案 »
- lomboz Eclipse 3.3 和 Tomcat的问题,搞了好久了,救命!
- java写的上传下载功能在tomcat服务器上可以用但是部署到公司的websphere服务器上后就只能上传不能下载了,有谁遇到过。。求助。。
- 求助!!如何通过调用远程服务器访问本地.exe程序??
- actionform 中放一个list集合,怎么在页面取值?
- mysql 日期和时间 timestamp问题
- struts2 如何获取上传文件的扩展名
- 严重:Context[/p] startup failed due to previous errors
- loadrunner
- 为什么我的 WINDOW XP 上装不上JVM????
- (初学者)EJB远程调用中的错误-急急急!
- 请教<s:hidden>设值问题
- ssh Jquery Ajax 乱码问题,各路英雄帮帮小弟呀.
URL url2=new URL("http://localhost:6080/admin/main.php);
这样吗?这样得到的main.php提示我没有登陆啊,我得让给我main页面的内容
你第一个outPutStream.println();后,ServerSocket 接到信息。发送回应数据,断开连接。
第二个pringln();就发不出去了。
刚学socket的 新建个socket的话session就不一样了吧
我们平时登录yahoo或163邮箱时总不会是建的多个socket的吧
毕竟已登陆是保存在上一个连接的session中的
(这是由浏览器做的。)
分析分析返回值,应该可以看出来。<input type=hidden name=sid value="285774ae7b31da030f">
<input type=hidden name=lid value="0">
这是什么?
这两个也要给回去?试下
两个解决办法:
1、要么接收数据的时候解析gzip数据包
2、修改代码:Accept-Encoding: deflate\r\n