2011-11-13 17 views
6

Próbuję użyć kodu jak poniżej, aby uzyskać źródło htm witryny i działa. Jednak nie mogę uzyskać wyniku, gdy odwiedzam stronę internetową http://reserve.apple.com/WebObjects/ProductReservation.woa/wa/reserveProduct, używając kodu jak poniżej. Ale mogę uzyskać dostęp do tej strony za pomocą przeglądarki poprawnie. Czy dasz mi wskazówki lub wskazówki, jak rozwiązać ten problem? Dziękuję Ci.Strona dostępu - WWW :: Mechanize

#!/usr/bin/perl 

use strict; 
use warnings; 

# create a new browser 
use WWW::Mechanize; 
my $browser = WWW::Mechanize->new(); 

# tell it to get the main page 

my $sURL = 'http://www.apple.com'; 

#my $sURL = 'http://reserve.apple.com/WebObjects/ProductReservation.woa/wa/reserveProduct'; 

$browser->get($sURL); 

print $browser->content; 

exit(0); 

Odpowiedz

6

To dziwne zachowanie, ale strona pod adresem URL chcesz odzyskać wymaga następujących nagłówków być zdefiniowane: Accept, Accept-Encoding, Accept-Language, Accept-Charset, Cookie.

W przeciwnym razie serwer w ogóle nie odpowiada.

Można łatwo to zrobić tylko wstawianie następujący kod przed „get” żądanie:

$browser->add_header(
    "Accept"   => "", 
    "Accept-Encoding" => "", 
    "Accept-Language" => "", 
    "Accept-Charset" => "", 
    "Cookie"   => "" 
); 

Zamiast pustych pól można wstawić jakieś prawdziwe wartości, ale to działa też.

+0

yko - Wspaniale! Właściwie to też o tym myślę. Ale czy podzieliłbyś się ze mną tym, dlaczego to wiesz? Dziękuję Ci. –

+0

Też się zastanawiałem. Dziękuję za podzielenie się odpowiedzią. :-) –

+0

@TommyLiu to tylko doświadczenie. Skopiowałem nagłówki z żądania chrome i wstawiłem je do żądania zmechanizowanego testu. A kiedy to zadziałało, zacząłem usuwać nagłówki jeden po drugim. Ups - przestał działać, gdy usuwam nagłówek. Następnie usunąłem fragmenty zawartości nagłówka przez porcję, aby znaleźć znaczące dane. Byłem zaskoczony, gdy okazało się, że nie potrzebuje żadnych danych. Tylko nazwy nagłówków: – yko

Powiązane problemy