Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie z hostuje.net [PHP/CURL]
japan13
post 15.09.2013, 20:34:33
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 31.10.2008

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


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

Ten post edytował japan13 15.09.2013, 20:35:49
Go to the top of the page
+Quote Post
foxbond
post 15.09.2013, 20:50:03
Post #2





Grupa: Zarejestrowani
Postów: 162
Pomógł: 12
Dołączył: 20.12.2009
Skąd: Siedlce

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


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)
Go to the top of the page
+Quote Post
japan13
post 16.09.2013, 20:27:23
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 31.10.2008

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


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.
Go to the top of the page
+Quote Post
Pyton_000
post 17.09.2013, 20:57:28
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Spróbuj jeszcze ustawić CURLOPT_USERAGENT na jakieś normalne
Ew. sprawdź jakie headery wysyłasz przy wejściu i dostosować je w php

Ten post edytował Pyton_000 17.09.2013, 20:58:08
Go to the top of the page
+Quote Post
jackraymund
post 18.09.2013, 07:47:13
Post #5





Grupa: Zarejestrowani
Postów: 217
Pomógł: 21
Dołączył: 10.06.2011
Skąd: Głogów

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


  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


--------------------
Wykonuje zlecenia na pobieranie danych ze stron i różne boty.
Go to the top of the page
+Quote Post
japan13
post 1.10.2013, 17:34:41
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 31.10.2008

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


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
Go to the top of the page
+Quote Post
Rikard
post 1.10.2013, 22:06:25
Post #7





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 11.09.2013

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


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ź
Go to the top of the page
+Quote Post
japan13
post 5.11.2013, 18:57:14
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 31.10.2008

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


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
Go to the top of the page
+Quote Post
jakub.drag
post 7.11.2013, 13:30:38
Post #9





Grupa: Zarejestrowani
Postów: 94
Pomógł: 9
Dołączył: 11.10.2010
Skąd: Kraków

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


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.


--------------------
Podchodź pozytywnie do swojego kodu :)
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: 24.04.2025 - 04:21