use strict; use warnings; use WWW::Mechanize; use Data::Dumper; my $url = 'http://xml.pangora.com/scripts/Redirect.php?fid=45&mid=1066&serviceName=idealo-de&serviceType=portal&oid=1066de515358&sid=73&pt=idealo-de.export.1-0&url=http%3A%2F%2Fwww.baur.de%2Fis-bin%2FINTERSHOP.enfinity%2FWFS%2FBaur-BaurDe-Site%2Fde_DE%2F-%2FEUR%2FBV_ExternalCall-Start%3FArticleNo%3D515358%26NUMSArt%3D4443504%26NUMSArtPc%3D4488615%26AffiliateID%3Dpangora-%2A%26Name%3Dpangora-produktdaten-baur%26ActionID%3Dpreis-produkt-suche-baur%26WKZ%3D79%26IWL%3D101'; my $price = '249,9'; print "price: $price\n"; my $redirect_url = redirect_url($url); my $redirect_url_expected = 'http://www.baur.de/is-bin/INTERSHOP.enfinity/WFS/Baur-BaurDe-Site/de_DE/-/EUR/BV_ExternalCall-Start?ArticleNo=515358&NUMSArt=4443504&NUMSArtPc=4488615&AffiliateID=pangora-bd&Name=pangora-produktdaten-baur&ActionID=preis-produkt-suche-baur&WKZ=79&IWL=101'; die "oops" unless $redirect_url eq $redirect_url_expected; my $mech = WWW::Mechanize->new(); $mech->agent('Firefox'); $mech->get( $redirect_url ); my $html = $mech->content; print "html from $redirect_url doesn't match $price\n" unless $html =~ /$price/ ; print "but paste into browser and view source, and it does\n"; print "final url after firefox redirect (but not www::mech redirect) is something like " . 'http://www.baur.de/is-bin/INTERSHOP.enfinity/WFS/Baur-BaurDe-Site/de_DE/-/EUR/BV_DisplayProductInformation-ArticleNo;sid=7oVhaTsE5oZsaX6rnON4q25Uv6S6Ixu_PzIwW50ajEGxS04TwoV1a_bGFYiItw==?ArticleNo=515358&ls=0&firstPage=true&showGewinnspiel=true&showW3B=false' . "\n"; # uncomment this to print html, which is totally different from what you get from firefox, show source. # print "html: $html"; # works ok sub redirect_url { my $url = shift or die "no url"; my $mech = WWW::Mechanize->new(); $mech->get( $url ); my $links; $links = $mech->links; $mech->get( $links->[1]->url ); $links = $mech->links; my $redirect_url = $links->[0]->base->as_string; }