我需要下载一些需要登陆才能察看的网页,为此我研究了Wininet相关的技术,好像能够登陆,但登陆后仍然不能下载?好像是需要把登陆时得到的cookie再post给新的链接,具体怎么办,我不清楚,大家给点代码?如果vc实在不行,java的也可以。各位帮帮忙,我都郁闷一天了,谢谢了。

解决方案 »

  1.   

    Java有个HttpClient包,现在是3.0吧.去www.apache.org下吧.里面支持比较完整的http协议的,完全能满足你的要求.呵呵
    其实在C++中URLDownloadToFile能满足你的.
      

  2.   

    URLDownloadToFile,这个给个例子,需要登陆才能下载的例子
      

  3.   

    用libcurl就可以做到……其实关键是Server的Session问题。现在一般的做法是你登录以后对方设置一个Cookie,里面是Session ID,最重要的就是保留Cookie,要获取你需要的网页的时候在HTTP Header里面加上你的Cookie就OK了(有时候还要改一下User Agent,libcurl默认是发送libcurl的数据,可以改为Mozilla 4.0啥的)如果你要Shell和curl的例子我倒有一个(主要是上次用PERL没有玩起来libcurl的cookie,就只好用PERL+ Shell的形式了……)……如果你时间不紧张,可以直接用libcurl的C APIs,这样基本上是没有问题的
      

  4.   

    我先问一句,你接触过Unix/类Unix系统吧?
      

  5.   

    能顺便把你的libcurl的C APIs发一份给我吗,谢谢了
      

  6.   

    这个……那就比较麻烦了……我的代码用PERL写的,有一些是Unix下面的惯例,估计你看不明白……libcurl的代码可以在curl.haxx.se下载到,我自己用的是FreeBSD下面编译好的library,给你也用不了(不知道Windows下面怎么用ELF的lib……)我把代码贴出来吧(重申,我用的是curl + Shell,不是直接用libcurl)……#! /usr/bin/perl -w
    #login.pl
    $cmd = 'curl';
    $data = 'UserName=xxxx&password=xxx';
    $command = "$cmd -d '$data' --cookie-jar cookiefile -v http://www.somesite.com/login.asp";
    print $command, "\n";
    $page = `$command`;
    print $page, "\n";#! /usr/bin/perl -w
    #send.pl
    $cmd = 'curl';
    $url = 'http://www.somesite.com/somepage.asp';
    $urlencoded = `./urlencode.php '$ARGV[0]'`;
    $data = 'chat0=&addchat='.$urlencoded;
    $command = "$cmd -d '$data' --cookie cookiefile --cookie-jar cookiefile -v $url"
    ;
    print $page, "\n";#! /usr/local/bin/php
    #urlencode.php
    <?php
            $GB2312 = iconv("UTF-8", "GB2312", $argv[1]);
            print urlencode($GB2312);
    ?>这里总共三个文件。当你用post提交东西的时候千万记住urlencode!除非你确认提交的东西里面没有http不允许的字符。curl的用法和参数可以在curl的官网查到。祝好运