LWP怎么解决随机url验证?[已解决]

LWP怎么解决随机url验证?[已解决]

比方说这样一个网页,每次查询后得到一个下载连接,类似http://www.xxx.com/down.php?id=x&key=1234567890abcdef这样,关键是后面这个随机数是每次请求后产生的,在浏览器里面点击链接即可下载,可是LWP如何搞定?

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

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

你得搞明白来龙去脉才行。
别瞎猜。
不好意思,主要就是不明白如何服务器做了什么。或许我上面没说明白,比如这个网站,http://www.jpwy.net/gc/,用LWP从上面下载歌词,能做到么?

难道要用ethereal之类的软件抓包下来看么?这个我也不大会,先看看吧。
当然可以。
LWP 就是个浏览器,你把浏览器做过的动作挨个儿用 LWP 做一遍就可以了。
比如下面的代码
$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我也只能模拟成这样,如何模拟这个点击过程发生的事件呢?
用 Wireshark 抓包是很管用的。
这样可以很清楚地看到你的浏览器和 server 之间的 HTTP 交互过程。
$ua = LWP::UserAgent->new();
改成
$ua = LWP::UserAgent->new( cookie_jar => {} );
试试吧。不一定行。主要还得你自己去研究。
单改这个好象没用,你的意思是不是还可能跟cookie相关?LWP才看到第六章,没办法,继续向第11章进发,看书去了。英文书真费劲啊

谢谢BZ,装个wireshark试试,刚知道ethereal改名叫wireshark了。
按照BZ的建议查了一下wireshark的用法,抓包对比后,发现成功的请求中http报文头部多了一些内容,最后发现是Referer:在起作用。

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

原来是通过引用下载链接的来源来验证的,我原先猜错了
早就跟你说了,别瞎猜。
一抓包,就什么都明白了。