Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: cURL - Przekierowania
Forum PHP.pl > Forum > PHP
Reptile ReX
Mam pewien problem mianowicie, mam input gdzie wpisuję adres strony.

CURL łączy się z tym adresem następnie wyrażenia regularne wyciągają odpowiednie dane
Ale nie w tym rzecz.

Chodzi o to że niektóre strony mają przekierowania.

Jako, że nie mogę w tym wypadku użyć CURLOPT_FOLLOWLOCATION to ten sposób odpada.

Więc zrobiłem sobie warunek że jeżeli nagłówek zwrócił kod 301 lub 302 to odczytuje wyrażeniem regularnym z nagłówka

Location: www.adres.pl/blabla/blabla

Ale czasami zdarza się, że serwisy mają kilka przekierowań, i wtedy mój sposób nie zadziała.

np: www.test.pl przekieruje nas do www.test.pl/index/ a ten nas przekieruje do www.test.pl/index/panel.php
cycofiasz
http://php.net/manual/en/function.curl-setopt.php

i tam w komentarzach userów jest kilka funkcji które Ci pomogą
Reptile ReX
Ok, dzięki.

Pomogła mi ta funkcja:

  1. function curl_redirect_exec($ch, &$redirects, $curlopt_header = false) {
  2. curl_setopt($ch, CURLOPT_HEADER, true);
  3. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  4. $data = curl_exec($ch);
  5. $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  6. if ($http_code == 301 || $http_code == 302) {
  7. list($header) = explode("\r\n\r\n", $data, 2);
  8. $matches = array();
  9. preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
  10. $url = trim(array_pop($matches));
  11. $url_parsed = parse_url($url);
  12. if (isset($url_parsed)) {
  13. curl_setopt($ch, CURLOPT_URL, $url);
  14. $redirects++;
  15. return curl_redirect_exec($ch, $redirects);
  16. }
  17. }
  18. if ($curlopt_header)
  19. return $data;
  20. else {
  21. list(,$body) = explode("\r\n\r\n", $data, 2);
  22. return $body;
  23. }
  24. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.