佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 930|回复: 2

java cookies问题

[复制链接]
发表于 16-6-2006 08:10 AM | 显示全部楼层 |阅读模式
我可以连接到我要到的网站然后得到它们的source code,
基本上有两个方法,
第一是用现成的class URL,
另外一个是Socket到port 80,然后send一个get的request给那个web server。

现在我的问题是,如果我想要开一些需要login的网站的话,
就必须用第二个方法,然后在send get request的同时,一起把cookies也send过去,
我是用firefox login先,然后copy那个cookies代码到program去的。
可是。。。work是work啦,不过不是很好。

请问有什么办法在java里把username和password send到login page去(应该和post有关吧?可是不会弄),
再把cookies保存下来,然后get request的时候就可以用那个cookies。
谢谢。
回复

使用道具 举报


ADVERTISEMENT

发表于 16-6-2006 02:27 PM | 显示全部楼层
原帖由 Netmercury 于 16-6-2006 08:10 AM 发表
我可以连接到我要到的网站然后得到它们的source code,
基本上有两个方法,
第一是用现成的class URL,
另外一个是Socket到port 80,然后send一个get的request给那个web server。

现在我的问题是,如果我想 ...


最常见的加锁的网页有两种,第一种是当你游览加锁网页时会有一个dialog pop 出来要求你输入username 和 password, 这一种是属于standard 的http authentication,

而另外一种就是用 cookies based, 例如佳礼,你可以选择下一次免登陆,当你登陆后cookies就会行成,而下一次登陆就不须要再输入username 和 password。 这种网页加锁可称为custom based http authentication. 缺点是,如果你要用socket 连接及自动登陆须费很多的功夫, 因为不同的网页有不同登陆网页及你需要handle 它们的cookies.

我这里只有解决第一种的方法也许你需要用到,至于第二种,让我想想,如果有的话我就post 上来

import java.io.BufferedInputStream;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;


public class SecureSourceViewer{
    public static void main(String args[]) {
        
        Authenticator.setDefault(new Authenticator(){
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("username", new char[]{'a','b','c'});
            }
        });
        
        try {
            URL url = new URL("http://www.google.com");
            
            InputStreamReader inputSR = new InputStreamReader(new BufferedInputStream(url.openStream()));
            
            int chr;
            
            while ((chr = inputSR.read()) != -1) {
                System.out.print((char) chr);
            }
        }catch (Exception ex) {
            System.err.println(ex.getMessage());
        }
        System.exit(0);
    }
}
回复

使用道具 举报

 楼主| 发表于 16-6-2006 03:43 PM | 显示全部楼层
先谢谢你的回复
虽然不是我要的
可是先收下了

下面这个是我刚写的
开启cari的短消息
也就是我所说的第二个方法

import java.net.Socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import javax.swing.JOptionPane;

public class openCari
{
        String sWeb;
        String sCookie="cdb_sid=lp2wbB";
        String sExpires="Friday, June 23, 2006 3:31:07 PM";
        String sAdress="chinese.cari.com.my";
        String sPath="/myforum/pm.php";
        Socket client;

        public void OpenWeb()
        {
                System.out.println("Connecting to cari...";

                    try
                {
                        client=new Socket("chinese.cari.com.my",80);
                }
                catch(Exception i)
                {
                        System.out.println("Could not connect to cari at the moment...";
                }
              
                System.out.println("Connected to cari...";

                       String msg="GET "+sPath+" HTTP/1.1\nAccept: */*\nAccept-Language: en\nHost: chinese.cari.com.my\nConnection: Keep-Alive\nCookie: "+sCookie+"; expires="+sExpires+"\n\n!";
              
                       // sending query and receiving result from travian web server
                        sendData(msg);
                receiveData();
        }

        public void sendData(String msg)
        {
                //System.out.println("sending data...";
       
                    try
                    {
                            DataOutputStream o = new DataOutputStream (new BufferedOutputStream (client.getOutputStream ()));
                            o.write(msg.getBytes(),0,msg.length());
                        o.flush();
                }
                catch(IOException e)
                {
                        System.out.println("Error when sending the data.";
                }
        
                System.out.println("Data Sent.";
        }
   
        public void receiveData()
        {
                String inputLine;
                    sWeb="";
           
                    try
                    {
                            DataInputStream i = new DataInputStream (new BufferedInputStream (client.getInputStream ()));
                   
                            while ((inputLine = i.readLine()) != null)
                        {
                                sWeb+=inputLine+"\n";
                        }
               
                        System.out.println("Data received";
        
                }
                catch(IOException e)
                {
                        System.out.println("Error when receiving the data.";
                }

                System.out.println(sWeb);
        }

        public static void main(String args[])
        {
                new openCari().OpenWeb();
        }
}

sCookie和sExpires是我从firefox得到的,放下去就可以开启必须登陆的webpage了
就不用URL class。
可是我想要用java登陆。。。
希望这个可以帮你帮到我


[ 本帖最后由 Netmercury 于 16-6-2006 03:47 PM 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 12-11-2024 01:20 AM , Processed in 0.081477 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表