2010-12-15 17 views
8

Wiem, że za pomocą cURL widzę docelowy adres URL, wskazując cURL na URL o CURLOPT_FOLLOWLOCATION = true.śledź przekierowania z curl w php

Przykład:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "www.example1.com"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
$result = curl_exec($ch); 
$info = curl_getinfo($ch); //Some information on the fetch 
curl_close($ch); 

$ informacji będzie mieć adres URL miejsca docelowego, które mogą być www.example2.com. Mam nadzieję, że moje powyższe zrozumienie jest poprawne. Daj mi znać, jeśli nie!

Moje główne pytanie brzmi: jaki będzie mógł wiedzieć cały typ przekierowania cURL? Przekierowanie Apache, przekierowania javascript, przekierowania w formie formularzy, przekierowania metaodświeżania !?

aktualizacja Dziękuję za Twoje answeres @ceejayoz i @ Joso. Czy istnieje sposób, dzięki któremu mogę śledzić wszystkie przekierowania programowo za pomocą php?

+0

Czy w tym wszystkim javascript i meta odświeżania ? meta refresh jest możliwy – ajreal

+0

@ajreal: Javascript jest również [możliwy] (http://pecl.php.net/package/spidermonkey), po prostu nie bez uzasadnionego wysiłku. – mario

Odpowiedz

9

cURL nie będzie śledzić przekierowań JS ani metatagów.

+0

Dzięki za odpowiedź. Trochę zaktualizowałem to pytanie. Dzięki – jtanmay

+0

Czy istnieje sposób, dzięki któremu mogę śledzić wszystkie przekierowania programowo przez php – jtanmay

+0

Prawdopodobnie nie w niezawodny sposób. Można całkiem łatwo odłożyć metaodświeżanie, ale jest tak wiele sposobów, aby zrobić to za pomocą JS - w tym wywołania zewnętrznych plików .js - że prawdopodobnie nigdy nie złapie się ich niezawodnie. – ceejayoz

1

Z tego, co wiem, następuje tylko przekierowanie nagłówka HTTP. (301 i 302).

+0

Dzięki za odpowiedź. Trochę zaktualizowałem to pytanie. Dzięki – jtanmay

1

curl to biblioteka z wieloma protokołami, która zapewnia tylko trochę wsparcia HTTP, ale niewiele więcej, co pomoże w twoim przypadku. Możesz ręcznie wyszukać tag odświeżania meta jako obejście.

Ale lepszym pomysłem było sprawdzenie PEAR HTTP_Request lub klasy Zend_Http, które prawdopodobnie już zapewniają coś takiego. Również phpQuery może mieć znaczenie, ponieważ ma własne funkcje http, ale może być łatwo, jeśli jest taka potrzeba. Lub poszukaj klasy przeglądarki podobnej do Mechanize: Is there a PHP equivalent of Perl's WWW::Mechanize?

2

Wiem, że ta odpowiedź jest trochę spóźniona, ale wpadłem na podobny problem i potrzebowałem czegoś więcej niż tylko śledzenia przekierowań HTTP 301/302. Napisałem więc małą bibliotekę, która będzie również śledzić metatagi rel = canonical i og: url.

https://github.com/mattwright/URLResolver.php

znalazłem metatagów odświeżania nie zapewniają wiele korzyści, ale są one wykorzystywane, jeśli zostanie zwrócony bez głowy lub ciała tag html.

+1

Dzięki za tonę Matt. Doceniam twoje wysiłki. –

1

Właśnie znalazłem to na stronie php. Analizuje odpowiedź, aby znaleźć przekierowania i podąża za nimi. Nie sądzę, że to dostaje każdy rodzaj przekierowania, ale to dość blisko

http://www.php.net/manual/en/ref.curl.php#93163

bym go skopiować tutaj, ale ja nie chcę popełnić plagiat