Próbuję sprawić, by curl podążał za przekierowaniem, ale nie mogę sprawić, by działało dobrze. Mam ciąg, który chcę wysłać jako parametr GET na serwer i uzyskać wynikowy adres URL.
Przykład:
Ciąg znaków = Kobold Vermin
Url = www.wowhead.com/search?q=Kobold+Worker
Jeśli przejdziesz do tego adresu URL, przekieruje Cię on do „www.wowhead.com/npc=257”. Chcę, aby curl zwrócił ten adres URL do mojego kodu PHP, abym mógł wyodrębnić „npc = 257” i użyć go.
Aktualny kod:
function npcID($name) {
$urltopost = "http://www.wowhead.com/search?q=" . $name;
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
curl_setopt($ch, CURLOPT_URL, $urltopost);
curl_setopt($ch, CURLOPT_REFERER, "http://www.wowhead.com");
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type:application/x-www-form-urlencoded"));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
return curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
}
To jednak zwraca www.wowhead.com/search?q=Kobold+Worker, a nie www.wowhead.com/npc=257 .
Podejrzewam, że PHP wraca, zanim nastąpi zewnętrzne przekierowanie. Jak mogę to naprawić?
curl
polecenia, przekaż flagę-L
lub--location
. Np.curl -L http://example.com/
Odpowiedzi:
Aby cURL podążał za przekierowaniem, użyj:
Eee ... Nie sądzę, że faktycznie wykonujesz zawijanie ... Spróbuj:
curl_exec($ch);
... po ustawieniu opcji, a przed
curl_getinfo()
rozmową.EDYCJA: Jeśli chcesz tylko dowiedzieć się, dokąd przekierowuje strona, skorzystam z porady tutaj i po prostu użyj Curl, aby pobrać nagłówki i wyodrębnić z nich nagłówek Location:
źródło
Dodaj tę linię, aby zwijać inicjalizację
i użyj getinfo przed curl_close
es:
źródło
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
jest luką w zabezpieczeniach. Zasadniczo mówi: „Ignoruj błędy SSL, jeśli jest uszkodzony - ufaj tak samo, jak niezaszyfrowanemu adresowi URL”.Powyższa odpowiedź nie działa dla mnie na jednym z moich serwerów, coś do z basedir, więc trochę ją ponownie zhaszowałem. Poniższy kod działa na wszystkich moich serwerach.
źródło
Location:
Nagłówek nie zawsze jest przestrzeganie przekierowanie. Zobacz również pytanie, które jest wyraźnie na ten temat: curl follow location errorWybrana tutaj odpowiedź jest przyzwoita, ale uwzględniająca wielkość liter, nie chroni przed względnymi
location:
nagłówkami (co robią niektóre witryny) lub stronami, które mogą faktycznie zawierać frazęLocation:
w treści ... (co obecnie ma zillow).Trochę niechlujnie, ale kilka szybkich zmian, aby uczynić to nieco mądrzejszym, to:
Zauważ, że to nadal idzie tylko 1 przekierowanie. Aby wejść głębiej, musisz pobrać zawartość i postępować zgodnie z przekierowaniami.
źródło
Czasami musisz pobrać nagłówki HTTP, ale jednocześnie nie chcesz zwracać tych nagłówków. **
Ten szkielet zajmuje się plikami cookie i przekierowaniami HTTP przy użyciu rekursji. Głównym pomysłem jest unikanie zwracania nagłówków HTTP do kodu klienta.
Możesz na nim zbudować bardzo mocną klasę loków. Dodaj funkcję POST itp.
źródło
Wiele wyrażeń regularnych tutaj, mimo że bardzo je lubię, ten sposób może być dla mnie bardziej stabilny:
Część lokalizacji to łącze w kodzie HTML wysłane przez apache. Dlatego Xpath jest idealny do jego odzyskania.
źródło
Możesz użyć:
źródło