java.net.*操作session/GET/POST方法

本文转自:http://dddspace.com/2009/06/java-net-operation-session-get-post-method.html

import java.io.BufferedReader;
02import java.io.IOException;
03import java.io.InputStreamReader;
04import java.net.MalformedURLException;
05import java.net.ProtocolException;
06import java.net.URL;
07import java.net.HttpURLConnection;
08 
09public class FarmerHelper {
10 
11    /**
12     * @param args
13     * @throws ProtocolException
14     */
15    public static void main(String[] args) throwsProtocolException {
16 
17        String loginUrlStr = "http://login.xiaonei.com/Login.do";
18        String homeUrlStr = "http://home.xiaonei.com/Home.do";
19        URL loginUrl = null;
20        URL homeUrl = null;
21        HttpURLConnection loginConn = null;
22        HttpURLConnection homeConn = null;
23        try {
24            loginUrl = new URL(loginUrlStr);
25            homeUrl = new URL(homeUrlStr);
26            try {
27                loginConn = (HttpURLConnection) loginUrl.openConnection();
28                homeConn = (HttpURLConnection) homeUrl.openConnection();
29            catch (IOException e) {
30                print("Conn't open the url connection!");
31                e.printStackTrace();
32            }
33        catch (MalformedURLException e) {
34            print("Illegal URL!");
35            e.printStackTrace();
36            return;
37        }
38        loginConn.setRequestMethod("POST");
39        loginConn.setRequestProperty("User-Agent",
40                "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.10)"
41                        " Gecko/2009042316 Firefox/3.0.10");
42        loginConn.setRequestProperty("Keep-Alive""300");
43        loginConn.setRequestProperty("Connection""keep-alive");
44        loginConn.setRequestProperty("email","alswlwangzi@163.com");
45        loginConn.setRequestProperty("password""xh77Gffb_i");
46        loginConn.setRequestProperty("submit""登录");
47        loginConn.setRequestProperty("Keep-Alive""300");
48 
49        try {
50            loginConn.connect();
51            String headerName = null;
52            String cookie = "";
53            /*
54             * for (int i=0; (headerName =
55             * loginConn.getHeaderFieldKey(i))!=null; i++) { if
56             * (headerName.equals("Set-Cookie")) { cookie =
57             * loginConn.getHeaderField(i); print(cookie); } }
58             */
59            cookie = loginConn.getHeaderField("Set-Cookie");
60            print(cookie);
61 
62            homeConn.setRequestProperty("Cookie", cookie);
63            homeConn.setRequestMethod("GET");
64            homeConn.connect();
65 
66            BufferedReader in = new BufferedReader(newInputStreamReader(
67                    homeConn.getInputStream()));
68            String lineStr = null;
69 
70            while ((lineStr = in.readLine()) != null) {
71                // print(lineStr);
72                print(new String(lineStr.getBytes("GBK"), "UTF-8"));
73            }
74        catch (IOException e) {
75            print("conn't connect to the server!");
76            e.printStackTrace();
77        }
78    }
79 
80    private static void print(Object o) {
81        System.out.println(o);
82    }
83

}

想法总是好的,现实总是残酷的,调试很久,用WireShark抓包,都是有Length Required错误,这个比较头疼,我感觉是我session传递的问题(其实不是,后来发现是Post的格式问题),于是网上找来一个Session操作类。 猛击这里下载cookiemanager 同时你可以参考这个类作者的文章猛击这里打开HOW-TO: Handling cookies using the java.net.* API,谢谢这位外国朋友的帮助。 可惜尽管有这个外国朋友帮助,我写了第二个版本,仍然遇到了相同问题,Length Required… 崩溃了,开始查找网络编程书,同时参考WireShark的抓包,我惊讶的发现,我把数据域写到了Headers里面去了。 这个致命性的错误导致服务器不能找到正确的数据,并且没有提供数据域的大小Content-Length,所以导致服务器报错。 最后再借花献佛,送上一个完整操作Http GET/POST的类猛击这里下载httprequestproxy依然感谢原作者,猛击这里打开原文链接友情提示一下,这个类是07年写的,里面有一些注释说明在1.4和1.5下几个参数不一样,我没有亲测,建议使用1.5的设置 嗯,有这两个类,明天工作应该会轻松一些,继续fighting!

版权所有 © 2010 转载本站文章请注明: 转载自Log4D
原文链接: http://dddspace.com/2009/06/java-net-operation-session-get-post-method.html
您可以随意地转载本站的文章,但是必须在醒目位置注明来源及本站链接,不可以将本站文章商业化使用,或者修改、转换或者以本作品为基础进行创作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值