Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie z hostuje.net [PHP/CURL]
Forum PHP.pl > Forum > PHP
japan13
Witajcie,

Ostatnio borykam się z dużym problemem związanym z nowym projektem. Mianowicie chodzi po pobieranie plików z hostuje.net poprzez bibliotekę CURL w PHP'ie.

Kod roboczy aktualnie przedstawia się tak:

  1. <?php
  2.  
  3. $id = $_GET['id'];
  4.  
  5. /*
  6. Połączenie z serwisem hostuje.net
  7. */
  8.  
  9. $ch = curl_init();
  10. curl_setopt($ch, CURLOPT_URL, "http://hostuje.net/file.php?id=".$id);
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  12. curl_setopt($ch, CURLOPT_HEADER, 1);
  13. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
  14. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
  15. $strona = curl_exec($ch);
  16. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  17. curl_close($ch);
  18.  
  19.  
  20. /*
  21. Prasowanie danych z serwisu hostuje.net
  22. */
  23.  
  24. $serw = preg_match_all('|<input type="hidden" name="k" value="(.*)">|U', $strona,$serw1);
  25. $nazwa = preg_match_all('|<input type="hidden" name="name" value="(.*)">|U',$strona,$nazwa1);
  26.  
  27. $rozmiar = preg_match_all('|<b>Rozmiar kontrolny w bajtach:</b>(.*)<br>|U',$strona,$rozmiar1);
  28.  
  29.  
  30. /*
  31. Zbieranie wszystkich danych potrzebnych do pobrania
  32. */
  33.  
  34. $serwer = str_replace(".hostuje.org","",$serw1[1][0]);
  35. $serwer = str_replace(".hostuje.com.pl","",$serw1[1][0]);
  36.  
  37. $nazwa_pliku = str_replace(".mp3","",$nazwa1[1][0]);
  38.  
  39. $rozmiar_pliku = str_replace(" ","",$rozmiar1[1][0]);
  40.  
  41.  
  42.  
  43.  
  44. $link_pobrania = "http://".$serw1[1][0]."/_tmp/id-".$id."-p-1.mp3";
  45. $c = curl_init();
  46. curl_setopt($c, CURLOPT_URL, $link_pobrania);
  47. curl_setopt($c, CURLOPT_RETURNTRANSFER, TRUE);
  48. curl_setopt($c, CURLOPT_HEADER, 1);
  49. curl_setopt($c, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
  50. $strona = curl_exec($c);
  51. $nag = curl_getinfo($c, CURLINFO_HTTP_CODE);
  52. curl_close($c);
  53.  
  54.  
  55. echo $nag;
  56. ?>


Wszystko działa pod warunkiem że najpierw wejdę ręcznie na link np: http://hostuje.net/file.php?id=ea2a6eebe59...53b5a14bfbf6397 i potem chcę pobrać ten sam plik przez mój skrypt to wszystko pójdzie bez problemu. Ale jeśli nie wejdę ręcznie w link do danego pliku to niestety ale skrypt wtedy zawodzi. Wydaje mi się że problem leży tutaj gdzieś po stronie sesji, borykał się ktoś z was kiedyś z podobnym problemem?

--
Z góry dzięki za odp
foxbond
1. Sprawdź dokładnie jakie ciasteczka generuje strona
2. Sprawdź czy na stronie nie ma żądań ajaxowych
3. Sprawdź zmienną:
$link_pobrania = "http://".$serw1[1][0]."/_tmp/id-".$id."-p-1.mp3"; (co zawiera dokładnie i czy będzie to poprawny adres)
japan13
1. Analizowałem je już od dłuższego czasu i wydaje mi się że po stronie ciasteczek wszystko jest ok.
2. Nie doszukałem się
3. Link wydaje się być ok, jeśli wejdę najpierw ręcznie na link z danym plikiem, a następnie na link ze zmiennej wszystko pobiera się bez najmniejszego problemu. Natomiast jeśli nie wejdę pobiera się plik ważący zaledwie 1kb.

Z góry dzięki za pomoc.
Pyton_000
Spróbuj jeszcze ustawić CURLOPT_USERAGENT na jakieś normalne
Ew. sprawdź jakie headery wysyłasz przy wejściu i dostosować je w php
jackraymund
  1. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
  2. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');

dodaj to w 2 zapytaniu
możliwe że po wejściu na strone link się aktywuje przez jakiś czas(może za pośrednictwem ajaxa czy coś, przeszukaj strone)
uzyj var_dump na $serw $nazwa i tych innych zmiennych
japan13
Witajcie,

Nadal nie dałem rady rozgryść tego tematu. Próbowałem już chyba wszystkiego, ale może ktoś z was ma jeszcze jakieś pomysły dlaczego dzieje się tak jak się dzieje? smile.gif Z góry dzięki.

--
Pozdrawiam S.N

Ma ktoś jakiś pomysł na rozgryzienie tego? smile.gif

Naprawdę nie macie żadnych pomysłów dlaczego to nie działa? sad.gif
Rikard
Cytat
Natomiast jeśli nie wejdę pobiera się plik ważący zaledwie 1kb.

Jak otworzysz ten plik w jakimś edytorze tekstowym to co tam pisze? Być może tam jest odpowiedź
japan13
Pusty jest :/

Witacie,

Próbowałem już chyba wszystkiego ale nadal nic nie ruszuło do przodu, ktoś jeszcze jakiś pomysł ? smile.gif

--
Z góry dzięki za pomoc wink.gif

Odświeżam, nadal nic działającego nie wymyśliłem smile.gif
jakub.drag
Może to nie jest rozwiązanie problemu... Ale jesli potrzebujesz to "na już, na teraz", to może przed wykonaniem kodu, wstaw niewidoczną ramkę, która załaduje tą strone u klienta, a następnie pobierz plik w php.
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.