2012-11-26 24 views
7

Używam cURL, aby uzyskać dostęp do wielu różnych stron. Chcę elegancki sposób sprawdzania, czy strona ma przekierowanie javascript. Mogłem sprawdzić obecność w ciele window.location, ale ponieważ może to być wewnątrz pliku .js lub przy użyciu biblioteki takiej jak jQuery, wydaje się, że żadne rozwiązanie nie byłoby idealne. Ktoś ma jakieś pomysły?Wykryj, czy strona ma przekierowanie javascript

+0

Nie (łatwo) możliwe proste polecenia curl, ponieważ curl nie obsługuje javascript. – PeeHaa

+0

Tak, myślałem raczej o uruchamianiu znaczników za pomocą analizatora składni, zamiast go wykonywać. – madphp

+0

Będziesz musiał wyszukać window.location w funkcji kodu zewnętrznego i wewnątrz funkcji, które są wywoływane przy ładowaniu strony. Obraźliwie, we wszystkich plikach również. – Ranty

Odpowiedz

2

Dzięki Ikstar dla wskazując phantomjs wypracowałem następujący przykład:

test.js

var page = require('webpage').create(); 
var testUrls = [ 
    "http://www.google.nl", 
    "http://www.example.com" 
]; 

function testNextUrl() 
{ 
    var testUrl = testUrls.shift(); 
    page.open(testUrl, function() { 
     var hasRedirect = page.url.indexOf(testUrl) !== 0; 
     console.log(testUrl + ": " + hasRedirect.toString()); 
     if (testUrls.length) { 
      testNextUrl(); 
     } else { 
      phantom.exit(); 
     } 
    }); 
} 

testNextUrl(); 

Wynik:

D:\Tools\phantomjs-1.7.0-windows>phantomjs test.js 
http://www.google.nl: false 
http://www.example.com: true 
+0

Jak działa Twój kod z przekierowaniami po stronie klienta JS? Czy zakończono by page.open przed uruchomieniem jakichkolwiek przekierowań JS? – CMCDragonkai

0

Nie można tego zrobić, parsując skrypt tylko. Tylko wykonanie pokaże ci prawdziwy przepływ strony JS strony.

Jednym ze sposobów naśladowania wykonania jest posiadanie różnych poziomów poziomu kodu z przekierowaniem. Górna część będzie pod tagiem <script>, a wszelkie przekierowania będą tutaj prostym przekierowaniem. Jeśli jakieś przekierowania znajdują się wewnątrz funkcji, musisz śledzić strukturę programu i zgadywać.

+0

To zależy od tego, co @madphp oznacza przez "ma przekierowanie javascript" ... Jeśli chce tylko wykryć obecność przekierowania, prosty parser, taki jak ten, który opisałem w komentarzach tego pytania, działałby dobrze. Jeśli chce wiedzieć, czy istnieje, i zostanie stracony, będzie musiał dokonać tych przypuszczeń. – renab

+0

Tak, to jest problem. Zastanawiałem się, czy nie byłoby niewinnego powodu dla window.location w funkcji. Podobnie jak przekierowanie do wersji mobilnej lub strony niebędącej stroną flash. – madphp

+0

@renab. Tak i dlatego przedstawiłem obie opinie. – footy

0

W zależności od celu użycia Curl i potrzebującego przekierowania na stronie. Możliwe jest włączenie bezgłowego frameworka, takiego jak PhantomJS (http://phantomjs.org/), aby wykonać niezbędne przeglądanie. Będziesz mógł zobaczyć, czy nastąpi przekierowanie, a także śledzić każdy inny javascript wykonywany na stronie.

Powiązane problemy