Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> cURL - Przekierowania
Reptile ReX
post 19.01.2011, 22:54:22
Post #1





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
cycofiasz
post 19.01.2011, 23:08:49
Post #2





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


http://php.net/manual/en/function.curl-setopt.php

i tam w komentarzach userów jest kilka funkcji które Ci pomogą
Go to the top of the page
+Quote Post
Reptile ReX
post 20.01.2011, 01:42:39
Post #3





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.07.2025 - 11:20