Chinaunix

标题: LWP怎么解决随机url验证?[已解决] [打印本页]

作者: byosoku5cm    时间: 2007-09-27 12:41
标题: LWP怎么解决随机url验证?[已解决]
比方说这样一个网页,每次查询后得到一个下载连接,类似http://www.xxx.com/down.php?id=x&key=1234567890abcdef这样,关键是后面这个随机数是每次请求后产生的,在浏览器里面点击链接即可下载,可是LWP如何搞定?

网站应该是在查询的时候产生的随机数,记录下下来,在收到下载请求的时候进行验证,不知道我说的对不对?

我现在用UserAgent->post发送查询请求,得到返回的网页并取出了下载链接,可是用这个链接调用get方法无法正确下载,哪位兄弟能提供一下思路么?

[ 本帖最后由 byosoku5cm 于 2007-9-27 16:02 编辑 ]
作者: flw    时间: 2007-09-27 12:44
你得搞明白来龙去脉才行。
别瞎猜。
作者: byosoku5cm    时间: 2007-09-27 13:47
不好意思,主要就是不明白如何服务器做了什么。或许我上面没说明白,比如这个网站,http://www.jpwy.net/gc/,用LWP从上面下载歌词,能做到么?

难道要用ethereal之类的软件抓包下来看么?这个我也不大会,先看看吧。
作者: flw    时间: 2007-09-27 13:51
当然可以。
LWP 就是个浏览器,你把浏览器做过的动作挨个儿用 LWP 做一遍就可以了。
作者: byosoku5cm    时间: 2007-09-27 14:06
比如下面的代码
$ua = LWP::UserAgent->new();
$resp = $ua->post("http://www.jpwy.net/gc/search.php", { "song" => "angelus"});
$content = $resp->content;
我从$content里面滤出歌词的下载链接,然后用$resp = $ua->get($url);得到的结果是被转向后的网站首页。

可能我还是没说清楚,你可以打开这个网站,搜一下歌词,得到的lrc歌词下载链接你点击可以下载,复制链接到地址栏就会被重定向到首页,用LWP我也只能模拟成这样,如何模拟这个点击过程发生的事件呢?
作者: flw    时间: 2007-09-27 14:09
用 Wireshark 抓包是很管用的。
这样可以很清楚地看到你的浏览器和 server 之间的 HTTP 交互过程。
$ua = LWP::UserAgent->new();
改成
$ua = LWP::UserAgent->new( cookie_jar => {} );
试试吧。不一定行。主要还得你自己去研究。
作者: byosoku5cm    时间: 2007-09-27 14:22
单改这个好象没用,你的意思是不是还可能跟cookie相关?LWP才看到第六章,没办法,继续向第11章进发,看书去了。英文书真费劲啊

谢谢BZ,装个wireshark试试,刚知道ethereal改名叫wireshark了。
作者: byosoku5cm    时间: 2007-09-27 15:56
标题: 搞定,THX
按照BZ的建议查了一下wireshark的用法,抓包对比后,发现成功的请求中http报文头部多了一些内容,最后发现是Referer:在起作用。

改为$ua->get($url, 'Referer' => 'http://www.jpwy.net/gc/search.php');后下载成功。

原来是通过引用下载链接的来源来验证的,我原先猜错了
作者: flw    时间: 2007-09-27 16:53
早就跟你说了,别瞎猜。
一抓包,就什么都明白了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2