Odpowiednik CURL w javascript

0

Potrzebuję w tle przejść na pewną podstronę i pobrać z outputa pewne wartości za pomocą wyrażeń regularnych.
Chciałem to zrobić w PHP, ale strona na której wszystko się odbywa zapisuje sobie adresy IP, tak więc wartości wygenerowane przez CURLa nijak mi się nie przydadzą bo przy próbie odtworzenia tych wartości z przeglądarki, dostaję błąd z tej strony.

Stąd, muszę w tle jakoś wykonać przekierowanie w javascript na tą stronę i pobrać ten output, wyrażeniami regularnymi pobrać to co potrzebuję i wstawić to co pobrałem w odpowiednie miejsce w kodzie HTML.
Wszystkie operacje muszą być wykonywane w js w tle, ponieważ (jak już wspomniałem) - ważny jest adres IP, z którego czynności są wykonywane, tak aby potem ten sam adres IP mógł korzystać z otrzymanych wyników.

Jak dokonać tego w javascript?

0

no i to jest wlasnie niemozliwe. gdyby to co chcesz zrobic byloby mozliwe to moglbym sie pod ciebie podszywac wysylajac zapytania z mojej strony np. do strony twojego banku, facebooka czy to tam masz jeszzce. Cross domain origin zabrania tego i bez dostepu do strony z ktorej chcesz pobrac nie ma opcji zmiany tego. i tu nie chodzi o IP a o zapytanie z innej domeny. Czyli jesli tworca zablokowal zapytania z innej domeny niz jego to nie zdzialasz nic.

0

Udało mi się w ten sposób:

$.ajax({
  type: "GET",
  url: "http://link.pl",
  dataType: "jsonp",
  async: false,
  success: function(data)
  {

  }
});

Jednak jest problem tego typu, że skrypt czyta pobrany output jako HTML i wyrzuca błąd:

SyntaxError: expected expression, got '<'

<html>

I pytanie, jak to zapisać jako tekst? Nie mogę zmienić atrybutu datatype, ponieważ przy każdym innym datatype, dostaję błąd "origin policy".

0

no nie udalo ci sie. origin policy ci na to nie pozwala, o czym przekonujesz sie uzywajac innego datatype. Obejsciem problemu jest uzycie jsonp, na co sam wpadles, ale zeby jsonp zadzialalo to dane musza zostac zwrocne jako jsonp czyli jako funkcje javascript, a do tego potrzebujesz dostepu do strony by ona wygenerowywal ci dane w formacie jsonp. podsumowujac. powtorze sie: NIEMOZLIWE jesli nie masz dostepu do strony z ktorej pobierasz dane.

0

Zrób to inaczej: przeczytaj kod js strony, która coś tam dodaje i powtórz te kroki u siebie w php.

Czyli, jeżeli widzisz, że skrypt w trzecim kroku wstawia ukrytego inputa o nazwie security i wartości 1 - to takie dane dokleisz do curla.

0

Na pewno w jakiś sposób jest to możliwe.
Próbuję pobrać pełną ścieżkę do filmu z playera online. Są w internecie strony, gdzie wkleja się link do takowego filmu i w odpowiedzi dostaje się ścieżkę do downloadu pliku. W kodzie podpatrzałem, że ajax wysyła ciasteczka, które zawiera moja przeglądarka, tak więc to zadanie jest realne.

Dodatkowo zabezpieczenie jest na pewno na IP, ponieważ ten skrypt z tej strony wygenerował mi link do downloadu i działał on - sprawdzałem. Następnie zresetowałem router, w celu zmiany adresu IP, spróbowałem ponownie pobrać plik i już dostałem informację, że link jest niepoprawny, ponieważ moje IP uległo zmianie.

0

W takim razie tamto narzędzie albo:

  1. robi za proxy docelowego filmiku. nie ściągasz go z oryginalnej lokalizacji tylko poprzez serwery tego narzędzia
  2. wykonuje jakieś akcje po stronie klienta - wtedy kod tego narzędzia masz jawny (javascript jest przecież przesyłany do klienta) - podpatrz sobie
0

Plik pobieram bezpośrednio z tej docelowej strony, ponieważ widzę po adresie URL.
Korzystam z firebuga dla FF i przepisałem wszystkie nagłówki, cookiesy, następnie połączyłem się poprzez CURLa i wykonałem wszystkie czynności po kolei. Niestety, brak efektu.

Próbowałem przed chwilą tak, że wszedłem ręcznie pod wskazany adres URL, skopiowałem z kodu źródłowego to co potrzebuję (hash), następnie wkleiłem go do kolejnego adresu URL i ten adres był poprawny... A przecież dokładnie to samo wykonuje mój CURL. Stąd twierdzę, że tam jest coś związanego z IP. A jeśli ja chcę pobrać ten film dla danego użytkownika, który właśnie odwiedza moją stronę to muszę generować to wszystko w tle, tak aby przekierowania dokonywane były z jego adres IP. Tak aby tworzący się hash przypisany był pod adres IP odwiedzającego :/

0

Ogólnie wzoruję się na tym: https://github.com/pruzam/zalukaj_tv/blob/master/download.py
Jednak ja to piszę w PHP, nie znam tego języka, który jest w linku powyżej, ale sporo można się domyśleć.

Doszedłem do linii 47, mam pełny adres, który tam jest obrabiany za pomocą wyrażeń regularnych. Niestety nie rozumiem tego kodu, który jest poniżej. Przypuszczam, że linia 56 jest tutaj ważna.
Może ktoś powiedzieć co jest tam wykonywane?

0

Podobno miało się nie dać połączyć ze stroną, która zawiera ORIGIN POLICY. Jednak się da:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script>

$.ajax({
        url: "strona",
        type: 'GET',
        dataType: 'text',
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
        },
        headers: {
            'Access-Control-Allow-Origin': '*'
        }})
</script>

Trzeba tylko nagłówek wysłać odpowiedni i po problemie.

0

To zależy od strony docelowej. Jeżeli zalukaj ma jakieś API to jest szansa, że zezwalają na żądania cross-domain (ale dziwne, że w obrębie całego serwisu).

Ty nie musisz ustawiać żadnych nagłówków. Access-Control-Allow-Origin to nagłówek serwerowy.

0

Znalazłem jakiś projekt w necie: http://easyxdm.net/ który wspiera całkowicie łączenie się ze stronami zabezpieczonymi tym "origin policy". Działa dobrze bo inicjuje połączenie pod wskazany link i firebug zwraca odpowiedź ze strony w postaci kodu HTML, jednak nie potrafię sam w zmiennej zwrócić tej odpowiedzi.

Miałeś styczność kiedyś z tym easyXDM ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1