Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: curl i vshare.io
Forum PHP.pl > Forum > PHP
rajdzen
Mam problem z curlem i http://vshare.io/. Okazuje sie ze strona wywolana z adresu bezposrednio w przegladarce ma inna zawartosc niz wywolana przez curl. Rozumial bym jak by byly wysylane zmienne jak np przy logowaniu sie ale tu niema logowania a jest proste wywolanie.
Chodzi o np adres filmu http://vshare.io/v/a35e03e/width-650/height-610/ pod ktorym pokazuje sie strona taka sama jak wowlanie przez curla tego samego adresu ale w srodku zmienia sie jedna linijka
przez co nie dziala film. Chodzi o nastepujace linijki:


zwykle wywolanie strony
url: 'http://s801.vshare.io/stream,9999999999999999999999999999999999999999-74f54193f81589168acbcfeffd6f4bcf,5515e36d,a35e03e.flv',
wywolanie curl
url: 'http://s801.vshare.io/stream,9999999999999999999999999999999999999999-84e362aa5e6553e09438ad73fa028995,5515e5cf,a35e03e.flv',

Poniżej kod:
  1. <?
  2. function curl($url, $post = null, $skad = null) {
  3. $ch=curl_init($url);
  4.  
  5.  
  6. curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.7) Gecko/20091221 Firefox/23.5.7' );
  7. $headers = array( 'Accept-Language: pl,en-US;q=0.7,en;q=0.3' , 'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7' , 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' );
  8. curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
  9.  
  10. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  11. curl_setopt( $ch, CURLOPT_COOKIEJAR, dirname( __FILE__ ) . '/c.txt' );
  12. curl_setopt( $ch, CURLOPT_COOKIEFILE, dirname( __FILE__ ) . '/c.txt' );
  13. curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
  14.  
  15. if($post!="") {
  16. foreach($post as $option => $value) {
  17. $postVars .= $option . '=' . urlencode( $value ) . '&';
  18. }
  19.  
  20. curl_setopt( $ch, CURLOPT_POST, 1 );
  21. curl_setopt( $ch, CURLOPT_POSTFIELDS, $postVars );
  22. }
  23.  
  24.  
  25. if ($skad) { curl_setopt( $ch, CURLOPT_REFERER, $skad );}
  26.  
  27. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  28. curl_setopt( $ch, CURLOPT_HEADER, 0 );
  29. curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
  30. $r=curl_exec( $ch );
  31. curl_close( $ch );
  32. return $r;
  33. }
  34.  
  35.  
  36.  
  37. $s="http://vshare.io/v/a35e03e/width-650/height-430/";
  38. $s=curl($s);
  39. echo $s;
  40.  
  41.  
  42. ?>
  43.  



johny_s
sprawdzałeś czy nic js'em nie jest generowane?
rajdzen
Mozesz rozwinąć aż tak mocno w tym nie siedze. Wydaje mi sie ze nie bo wywolanie jest podobne. Jest jakies zabezpieczenie na 100% bo by ladnie to chodzilo, ale niewiem jak to ruszyc
Mody23
Nie zrobisz tego tak wink.gif Ten link jest generowany zależnie od IP odwiedzającego. Sam nad tym siedzę od 2 tygodni i nic nie wymyśliłem sensownego.
Ten link, który wygenerował Ci CURL jest przypisany do IP Twojego serwera, więc za pośrednictwem Twojego serwera możesz korzystać z tych linków, ale jak otworzysz to przez własną przeglądarkę, dostaniesz błąd, ponieważ są różne adresy IP.
AJAXem też tego nie zrobisz bo tam jest cross-domain policy, więc ciężko to jakkolwiek ominąć. Jedyne co możesz zrobić to pobrać ten plik na własny serwer i wysłać go z własnego serwera do odwiedzającego.
rajdzen
Cytat(Mody23 @ 28.03.2015, 01:20:08 ) *
Nie zrobisz tego tak wink.gif Ten link jest generowany zależnie od IP odwiedzającego. Sam nad tym siedzę od 2 tygodni i nic nie wymyśliłem sensownego.
Ten link, który wygenerował Ci CURL jest przypisany do IP Twojego serwera, więc za pośrednictwem Twojego serwera możesz korzystać z tych linków, ale jak otworzysz to przez własną przeglądarkę, dostaniesz błąd, ponieważ są różne adresy IP.
AJAXem też tego nie zrobisz bo tam jest cross-domain policy, więc ciężko to jakkolwiek ominąć. Jedyne co możesz zrobić to pobrać ten plik na własny serwer i wysłać go z własnego serwera do odwiedzającego.

To moze jquery lub poprostu js?
Aqu
Nie da rady, cross-domain policy, tak jak kolega na górze napisał.
rajdzen
Cytat(Aqu @ 30.03.2015, 13:06:15 ) *
Nie da rady, cross-domain policy, tak jak kolega na górze napisał.


No ale js pracuje po stronie przegladarki wiec jak np wyciagniesz link po stronie klienta w jego przegladarce i przekarzesz do playera to bedzie to samo ip
untorched
Kolego @rajdzen, chyba nie masz pojęcia czym jest cross-domain policy, więc nie wprowadzaj nikogo w błąd. Tak, JavaScript wykonywany jest po stronie przeglądarki, lecz są tutaj zrealizowane pewne zabezpieczenia, które nie pozwalają na takie manewry. Wyobraź sobie sytuację, gdzie wchodzisz na jakąś stronę internetową, a ona bez żadnego problemu bez wiedzy użytkownika wysyła zapytania do innych stron(spamowanie formularzy lub czegokolwiek). Teraz rozumiesz?
rajdzen
Cytat(untorched @ 30.03.2015, 21:37:28 ) *
Kolego @rajdzen, chyba nie masz pojęcia czym jest cross-domain policy, więc nie wprowadzaj nikogo w błąd. Tak, JavaScript wykonywany jest po stronie przeglądarki, lecz są tutaj zrealizowane pewne zabezpieczenia, które nie pozwalają na takie manewry. Wyobraź sobie sytuację, gdzie wchodzisz na jakąś stronę internetową, a ona bez żadnego problemu bez wiedzy użytkownika wysyła zapytania do innych stron(spamowanie formularzy lub czegokolwiek). Teraz rozumiesz?

Szczerze twoje tlumaczenie nic mi nie wytlu,aczylo. Jak mozesz rozwin to bardziej. Moj tok myslenia jest taki ze jak sobie wczytam np w iframe strone i podejrze zrodlo to po wklejeniu w przegladarke film chodzi. Z tego co wiem nie moge zemianiac zawartosci iframe ale moze udalo by sie jakos odczytac i dalej przeslac ten link.

Troche szukalem i ciezka sprawa. Pytanie: czy istnieje jakis sposob by odczytac iframe lub przeslac poprzez formularz zawartosc iframe?
Aqu
Nie masz możliwości w javascripcie, żeby podejrzeć źródło iframe. Inny przykład, gdyby była taka możliwość, to ktoś mógłby stworzyć iframe z np. facebookiem/gmailem i odczytać twoje wiadomości.
rajdzen

A inne sposoby np aplety java czy flash chodzi mi o wczytanie strony do nich i przeslanie jako zmiennej.

Wez mi wyjasnij jakim cudem mozna by bylo odczytac wiadomosci z fb jak by sie dalo gmerac w iframe przeciez masz na fb logowanie.
Nattfarinn
Cytat(rajdzen @ 31.03.2015, 23:52:36 ) *
Wez mi wyjasnij jakim cudem mozna by bylo odczytac wiadomosci z fb jak by sie dalo gmerac w iframe przeciez masz na fb logowanie.

Abstrahując, to byłaby okropna luka w zabezpieczeniach. Użyj wyobraźni.

Wszystkie te zabezpieczenia powstały nie bez powodu i są właściwie częścią każdej współczesnej przeglądarki. W skrócie, serwer który chcesz odpytywać musi jawnie (np. za pomocą nagłówków w przypadku CORS lub pliku XML w przypadku Flasha) pozwolić Twojej przeglądarce korzystać ze zwróconego contentu. Tak samo, możesz też jawnie to zabezpieczenie u siebie wyłączyć (np. uruchamiając przeglądarkę z parametrem --disable-web-security dla Chrome) ale nie zrobisz tego z poziomu skrypu JS. Nie powiesz chyba, że nie widzisz niczego złego w wyłączaniu (lub obchodzeniu) zabezpieczeń użytkowników bez ich wiedzy?
rajdzen
wrocmy do tematu curla.... chodzi o zmiane ip przez curla
curl_setopt($ch, "CURLOPT_INTERFACE", "123.123.123.123");

niestety to nie dziala pytanie dlaczego jak wstawie ten parametr to nie dziala. Czy to z powodu zabezpieczen wczesniej omawianych?
Nattfarinn
Cytat(rajdzen @ 2.04.2015, 11:44:59 ) *
wrocmy do tematu curla.... chodzi o zmiane ip przez curla
curl_setopt($ch, "CURLOPT_INTERFACE", "123.123.123.123");

niestety to nie dziala pytanie dlaczego jak wstawie ten parametr to nie dziala. Czy to z powodu zabezpieczen wczesniej omawianych?

Poniekąd tak (nie jest to powód, ale oczywista konsekwencja). Będąc dokładnym, to:
  1. curl_setopt($ch, "CURLOPT_INTERFACE", "123.123.123.123");

Ten parametr pozwala wybrać IP z tych dostępnych na inferfejsach sieciowych serwera. Weź pod uwagę sytuację, w której serwer ma dwa interfejsy sieciowe (np. dwie karty) i jest dostępny pod dwoma różnym IP'kami. CURLOPT_INTERFACE pozwala wybrać jeden z nich i wykonać z niego request. To nie ustawia IP na taki jaki sobie zażyczysz. Musisz przyjąć do wiadomości, że to co chcesz osiągnąć jest, mówiąc w uogólnieniu, niewykonalne. Serwer docelowy pobiera IP z protokołu TCP/IP i nie jesteś w stanie z poziomu języka tego zmienić.
rajdzen
Hmm no to zostaje albo proxy albo napisac programik delphi /c+ i po stronie klienta odpalac lub jako cgi cos zrobic. Ponoc komus udalo sie obejsc te zabezpieczenia ale pewnie na lokalnym serwerku robil manewry z ip i dlatego mu dzialalo;p
kondzio18
Jakbys nie zauwazyl to zalukaj.tv pobiera jakos link z vshare i wykorzystuje je w playerze.


ps: wpadł już ktoś na pomysł jak rozwiązać ten problem?
untorched
Cytat(kondzio18 @ 6.04.2015, 14:28:39 ) *
Jakbys nie zauwazyl to zalukaj.tv pobiera jakos link z vshare i wykorzystuje je w playerze.


ps: wpadł już ktoś na pomysł jak rozwiązać ten problem?


Kolejny znawca "internetów". Zwykłe iframe z playerem.. Dowód? W formie screena
http://zapodaj.net/e8cc6e18c601d.png.html
KR2615
Trochę nieprofesjonalnie wyedytowałeś tgo screena....
kondzio18
Cytat(untorched @ 6.04.2015, 23:57:18 ) *
Kolejny znawca "internetów". Zwykłe iframe z playerem.. Dowód? W formie screena
http://zapodaj.net/e8cc6e18c601d.png.html


Znawco internetow moze zalogowalbys sie w serwisie, a nie probujesz zabłysnąć.

Po wykupieniu zalogowaniu i vipa w kodzie zrodlowym wszystko zobaczysz smile.gif

Np. view-source:zalukaj.tv/player.php?w=d4b96f1&x=1&id=22162
Kod
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
                <script type="text/javascript" src="/flowplayer/flowplayer-3.2.12.min.js"></script>
                <style>
            #buttonsPL {
                margin-bottom:2px;
            }
            #buttonsPL a {
                border:1px solid black;
                -webkit-border-radius: 3px;
                -moz-border-radius: 3px;
                border-radius: 3px;
                padding:5px;
                background-color:black;
                text-decoration:none;
                font-weight:bold;
                font-size:12px;
                color:#AFAFAF;
            }
            #buttonsPL a.active {
                color:#FFFFFF;
                pointer-events: none;
                border-top:2px solid silver;
                border-right:1px solid silver;
                border-left:1px solid silver;
                margin-bottom:4px;
            }
        </style>
                <style>
                .komunikat-blad {
                    padding:20px;
                    margin:20px;
                    border:1px solid silver;
                    background-color:#494949;
                    font-weight:bold;
                    color:silver;
                    font-size:12px;
                }
                </style>
    </head>
    <body>
    
<div id="player" style="width:450px;height:300px;"></div>

<script>
            flowplayer("player", "/flowplayer/flowplayer.commercial-3.2.16.swf", {
            key:'#$f4f6795ddda2865406a',
            clip:  {
                url:'http://s28.vshare.io/forward,11111111111111111111-f6845720d46d4df9542626214d8f0c87,552449fa,29,d4b96f1.flv',
                provider: 'lighttpd',
                autoPlay: false,
                autoBuffering: false
            },
            canvas: {
                backgroundColor:'#000000',
                backgroundGradient: 'none'
            },
            controls: {
                        url: '/flowplayer/flowplayer.controls-3.2.15.swf',
                        autoHide: 'always'
            },
            plugins: {
                lighttpd: {
                    url: "/flowplayer/flowplayer.pseudostreaming-3.2.12.swf",
                    queryString: escape('?start=${start}')
                    }
            }    
            
        });
        </script>
<p style="margin-bottom:10px;">
    <a style="display:inline;line-height:normal;font-weight:bold;font-size:12px;color:white;text-decoration:underline;" href="/player.php?w=d4b96f1&x=1&id=22162&player=new">Nowy Player</a> |
    <a style="display:inline;line-height:normal;font-weight:bold;font-size:12px;color:white;text-decoration:underline;" href="/player.php?w=d4b96f1&x=1&id=22162&player=stary" >Stary Player (dla PS3 itd)</a>


Pytanie teraz jak oni to obeszli biggrin.gif
Aqu
To może nam po prostu pokaż ten kod?
kondzio18
Proszę bardzo, wyżej wkleiłem może komuś to coś da.

Jakby dalo rade to moglbym pobrac curlem z zalukaj, ale zeby zobaczyc link z vshare trzeba byc zalogowanym w serwisie w innym przypadku curl nic nie pobierze haha.gif
untorched
Cytat(kondzio18 @ 7.04.2015, 22:10:54 ) *
Po wykupieniu zalogowaniu i vipa w kodzie zrodlowym wszystko zobaczysz smile.gif


Po czym, co, proszę? Nie wiem jak wygląda świat ludzi, którzy płacą za oglądanie "kradzionych" filmów w internecie, ale jeśli ktoś nie płaci to dostaje w kodzie zwykłą iframkę z vshare.io i tyle.
Pyton_000
Dobra, można użyć tego do odtwarzania filmów z vshare: http://gkplugins.com/download1/gkplugins_vshareio.zip

Teraz pytanie jak to spiąć z tym: mediaelementjs.com
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.