Opera i metatag refresh

0

Witam,
na swojej stronie umiescilem odnosnik do dokumentu PDF, ktory znajduje sie na innej stronie (nie mojej).
Wlasciciele tamtej strony, zablokowali dostep do tego dokumentu, w momencie kiedy otwierany jest z przekierowania z innej strony.
Ominalem ten problem uzywajac kodu:

<meta http-equiv="refresh" content="0; URL=http://jakas tam strona">

I wszystko pieknie dziala ale nie pod Opera!
Nie mam pojecia jak to obejsc w tej przedziwnej przegladarce.
Moze wiecie jak to zrobic ?

0

To może JavaScript?

onload = function()
{
  window.location.href = "URL";
}
0

Ale może po takim czyms byc referek

0
guest123 napisał(a)

To może JavaScript?

onload = function()
{
  window.location.href = "URL";
}

To sprawdzalem jako pierwsze rozwiazanie i nawet pod FF nie dziala :(

0

No jak się przekleja kod bez sensu, to współczuję.

0
Demonical Monk napisał(a)

No jak się przekleja kod bez sensu, to współczuję.

bez sensu sa takie odpowiedzi ...

Gdybys poczytal i zrozumial w czym tkwi problem, nie pisalbys takich "madrych" postow !

0
window.onload = function()
{
     window.location = "http://";
}
0
Keraj napisał(a)
window.onload = function()
{
     window.location = "http://";
}

Niestety, ale to nadal nie dziala.
Tamten serwer nadal widzi, ze jest to przekierowanie, a nie wejscie bezposrednie :/

0

@urbiasz:
Możesz podać przykładowy link do PDF-a? Wtedy coś bym mógł pokombinować. Nie będzie to takie łatwe, skoro window.location nie działa. Domyślam się też, że wykorzystanie Twojego serwera jako tunelu/proxy (tj. żeby to on pobierał te PDF-y i przekazywał je dalej) nie wchodzi w grę?

Nagłówki (w tym referer) można bez problemu ustawić w JavaScripcie za pomocą Ajaxa (XMLHttpRequest -- w skrócie XHR), ale XHR nie jest w stanie wysłać żądania do innego serwera. Mam parę typowo haxi0rsko/bamberskich pomysłów, z których jakiś może zadziała, ale nie ma sensu ich tu wypisywać, bo mogą być w tym wypadku bzdurne. Nie gwarantuję, że znajdę czas żeby zerknąć, ale jak dasz link do przykładowego PDF-a, to jest szansa. Nieraz tak mam, że coś mnie zaintryguje i muszę to rozgryźć, choć nie mam kontroli nad włączeniem (lub nie włączeniem) tego trybu.

0

Pewnie PDF jakoś kontrolowany przez skrypt w PHPku, a dla zachowania piękności linku mod_rewrite.
Może ewentualnie serwis który serwuje ten pliczek wymaga żeby ref nie był pusty i zawierał koniecznie adres ich strony. Wtedy sprawa się komplikuje...

No chyba że rozwiązanie pośredniczenia Twojego serwera przy podawaniu tego pliku (tak jak napisał bswierczynski) może wchodzić w grę, wtedy z cURLa możesz sobie ustawić referer jaki Ci tylko do głowy przyjdzie.

0

Niestety, ale to nadal nie dziala.
Tak myślałem...

w php:

header("Location: http://jakis adres");

Nie zostawia w ani w FF, ani w Operze referka :P

0

The winner is ... KERAJ !
Dzieki ! wlasnie oto chodzilo.
Teraz pieknie wszystko dziala.
I Opera, FF i IE pieknie to obsluguja :)

A dla ciekawych jaki to link ...:
http://www.porsche.com/all/media/pdf/originalparts/de/D_996_KATALOG.pdf

Jeszcze raz wielkie dzieki za pomoc :)

0

No i padaka :/
Wszystko pieknie dziala kiedy przetestowalem sobie to w taki sposob:

<?header("Location: http://www.porsche.com/all/med[...]inalparts/de/D_996_KATALOG.pdf");?>

Niestety, ale plik w ktorym to jest napisane, najpierw musi wczytac z bazy link, ktory ma byc zaladowany a dopiero pozniej go zaladowac, czyli:

zapytanie do bazy.....
header("Location: $odpowiedz z bazy");

i to niestety juz nie dziala ....
domyslam sie, ze jest to zwiazane z tym, iz header musi byz w pierwszej lini pliku.
A tutaj tak sie tego nie da zrobic:(
Nie chce mi sie tez bawic, ze bede z tego pluku przekierowywal do nast. w ktorym bedzie odnosnik pod konkretny adres:/

0

iz header musi byz w pierwszej lini pliku.

Nie prawda. Musisz przetworzyć nagłówki zanim wyślesz jakąkolwiek zawartość.
Użyj output bufferingu (ob_start) lub nie używaj echo(), print() czy jeszcze nie wiem czego przed wysłaniem headera.

Tak jeszcze co do tego:

header("Location: $odpowiedz");

Lepiej tak:

header('Location: ' . $odpowiedz);
0

@urbiasz:
Do tego co napisał @Demonical Monk dodam, że echo/printa możesz zrobić bezwiednie. PHP domyślnie przepisuje na wyjście (tj. robi jakby echo) wszystko, co jest poza tagami <?php ... ?>. Czasami więc ludzie piszą tak:

(oczywiście "[spacja]" to " " itd., ale białych znaków nie widać, więc zapisałem je w nawiasach kwadratowych)

[spacja][spacja][enter]
<?php

header('...');

?>

Najpierw PHP robi echo dla tych dwóch spacji i znaku nowej linii, a potem nie może już wysłać nagłówków funkcją header. Ba, problemem nie muszą być nawet spacje, czy znaki nowej linii. W kodowaniu UTF masz tzw. BOM -- taki jakby niewidoczny znak, który zawiera informacje o kodowaniu. Musisz w takim wypadku zadbać, by edytor tekstowy zapisał kod bez BOM.

Jak użyjesz buforowania (ob_start()) itd. to też będzie dobrze, ale mówię tak na przyszłość.

0
Demonical Monk napisał(a)

Nie prawda. Musisz przetworzyć nagłówki zanim wyślesz jakąkolwiek zawartość.
Użyj output bufferingu (ob_start) lub nie używaj echo(), print() czy jeszcze nie wiem czego przed wysłaniem headera.

Kurcze, teraz to zglupialem. Nigdy nie uzywalem opcji ob_start, wiec chyba robie cos nie tak.
Kod wyglada teraz tak:

function start(){header("Location:".$wyn[0]);}
$host="host";
$baza="test";
$user="test";
$passwd="haslo";
$con=mysql_connect ("$host","$user","$passwd");
mysql_select_db("$baza",$con);
$search = explode("-", $_GET['id']);
$id=$search[0];
$la=$search[1];
if($la==1){$zap="select sm_link from cars_link where id_sm=$id";}
if($la==2){$zap="select sm_linken from cars_link where id_sm=$id";}
$pyt = mysql_query($zap, $con);
$wyn =mysql_fetch_row($pyt);
ob_start('start');

I niestety dostaje blad 302, ze dokument zostal przeniesiony.
I tego teraz nie rozumiem:/

Natomiast gdy zrobilem tak:

ob_start();
$host="host";
$baza="test";
$user="test";
$passwd="haslo";
$con=mysql_connect ("$host","$user","$passwd");
mysql_select_db("$baza",$con);
$search = explode("-", $_GET['id']);
$id=$search[0];
$la=$search[1];
if($la==1){$zap="select sm_link from cars_link where id_sm=$id";}
if($la==2){$zap="select sm_linken from cars_link where id_sm=$id";}
$pyt = mysql_query($zap, $con);
$wyn =mysql_fetch_row($pyt);
header("Location:".$wyn[0]);
ob_end_flush();

wtedy tamten serwer wykrywa, ze jest to przejscie z innej strony :(

0

Ten drugi przykład jest dobrze, poza tymi:

$con=mysql_connect ("$host","$user","$passwd");

Które nie dość że denerwująco wyglądają to jeszcze parser ma więcej roboty przez to. Poprawnie:

$con=mysql_connect($host, $user, $passwd);

Pokaż jeszcze jaką wartość ma zmienna $wyn[0] tuż przed samym wysłaniem headera, może jakiś zły URL podajesz.

0
$wyn[0]=http://www.porsche.com/all/media/pdf/originalparts/de/D_996_KATALOG.pdf

Wynik jest ok. Adres ktory dostaje, normalnie dziala, ale niestety tamten serwer w takim przypadku widzi, ze strona jest otwierana z przekierowania :(

0

czy jeżeli w ten sam kod na sztywno wkleisz ten tekst (zamiast header(...)), to działa? Wycinaj po kolei linijki, to zobaczysz, gdzie masz buga.

poza tym, na samym początku pliku wklej:
error_reporting(0xFFFF);

0

Nie wiem, może przeglądarka inaczej parsuje nagłówek jeśli podajesz go w takiej formie:

Location:http://www.porsche.com/all/media/pdf/originalparts/de/D_996_KATALOG.pdf

No bo w końcu w twoim kodzie nie dbasz o spacje, ani o przejrzystość:

header("Location:".$wyn[0]); //Dodaj spację między dwukropkiem, a cudzysłowem.

Tylko to mi przychodzi do głowy skoro przekierowuje pomyślnie...

0

No i niestety, teraz to dopiero sie namieszalo:/
Sprawdzam sama linie z HEADER i okazuje sie, ze tez juz to nie dziala :/ (wczoraj dzialalo)
czyli chyba niestety ale bede musial zostac przy starym rozwiazaniu z metatagiem, a Opera niech sie usmiechnie do ....

0

Podaj ten dokument przez cURLa i nie będzie never żadnych problemów.

0

Problem raczej bedzie :( Ta firma, bardzo nie lubi kiedy ktos ich przechytrzy tym bardziej, ze używajac cUrla, moga sie czepic, iz jest to nielegalne i niemoralne.
No ale oczywiscie sprawdzilem jalby to zadzialalo no i mam nast. problem :)

Kiedy zrobilem to tak:

$hand = curl_init($wyn[0]);
curl_exec($hand);
curl_close($hand);

wtedy fakt, ze strona sie otwiera, ale jest pokazywane zrodlo pliku PDF (czyli tak jakbysmy edytowali ten plik).
Pewnie robie cos zle, ale na razie to waham sie nad tym rozwiazaniem.

0

Btw. jak to w ogóle jest, bo trochę się pogubiłem...

Chcesz na swojej stronie podlinkować do zewnętrznego dokumentu, np. tego: http://www.porsche.com/all/media/pdf/originalparts/de/D_996_KATALOG.pdf. Nie możesz jednak linkować bezpośrednio do niego, bo chcesz np. odnotować fakt kliknięcia w ten link w swojej bazie danych. Więc link kierujesz do pliku PHP na swojej stronie. Skrypt z tego pliku zapisuje coś w bazie (np. "użytkownik kliknął w link do strony Porsche!"), po czym przekierowuje do dokumentu na stronie Porsche... ale to już nie działa. Bo strona Porsche jakoś magicznie wykrywa, że to Twoja strona do nich hotlinkuje.

Czy dobrze się wyraziłem i dobrze opisałem Twój problem?

Jeśli tak i jeśli strona Porsche sprawdza referera, to nie tyle na zasadzie "czy refererem jest porsche.com?", tylko: "czy referer nie jest w ogóle ustawiony lub czy jest ustawione na porsche.com?". Możemy przecież bez problemu zobaczyć ten dokument wklejając link w pasek adresu przeglądarki (wtedy referer nie jest w ogóle ustawiony). Ale wydaje mi się, że skoro tylko redirect nie działa, a nawet linki na tym forum działają (!), to może oni jakoś inaczej wykrywają redirecta. Cholera wie jak. Cała sprawa trochę mi śmierdzi. Pomóc mogłoby przeanalizowanie ruchu HTTP -- czym dokładnie różni się zwykły od redirecta.

Ale nawet bez tego mam pewien pomysł, o ile w ogóle dobrze zrozumiałem Twój problem. Jest sposób, byś wyłapał przynajmniej większość kliknięć w link: za pomocą JavaScriptu. Tyle że zadziała to tylko tym, co mają włączony JS (musiałbyś zobaczyć w statsy swojej strony, czy Ci się to opłaca).

0

@bswierczynski:
Zle mnie zrozumiales.
Nie chce odnotowywac faktu klikniecia w ten link.
po prostu chce, aby klient ktory kliknie w ten link, zobaczyl to co pod nim jest.
A ze stron, do ktorych chce przekierowac jest sporo, dlatego zapisalem je w bazie i z tamtad pobieram adres do linka.
Natomiast serwer Porsche robi taki numer, ze wychwytuje czy dany adres jest podany z przekierowania czy tez podany bezposrednio.
Jak do tej pory uzywalem opcji przekierowania poprzez metatag, czyli na mojej stronie podawalem link do pliku np. www.mojastrona.pl/start.php?id=1
gdzie ten plik odczytywal z bazy link o ID=1 i poprzez metatag przekierowywal na strone Porsche.
I wszystko ladnie dzialalo, ale tylko pod IE i FF. Natomiast pod Opera, Chrome juz na takie cos nie dzialalo:( po prostu wywalalo blad 404.

Pomysl Demonical Monk jest dobry, ale obawiam sie problemow ze strony Porsche, poniewaz jezeli dokument z ich strony pojawi sie w oknie, to adres tego dokumentu, bedzie pokazany, jakby byl wyswietlany bezposrednio z mojej strony (czyli ze plik jest zapisany bezposrednio na moim serwerze), na co Porsche nie wyraza zgody. A znajac ich ....... trudno bedzie wytlumaczyc im, ze dane pliki nie sa zapisane na moim serwerze, tylko ze przegladarka tak pokazuje :(
I tu teraz mam zgryza, co tu zrobic ...

Ps. Co do JS - moi klienci maja wlaczona obsluge JS (taki maly wymog :))

0

Ta firma, bardzo nie lubi kiedy ktos ich przechytrzy tym bardziej, ze używajac cUrla, moga sie czepic, iz jest to nielegalne i niemoralne.

W jakim stopniu nielegalne i niemoralne? Ściągasz sobie PDFa na dysk w serwerze, a potem go udostępniasz odciążając tym samym stronę porsche ;>

Walnij na początku tego swojego kodu urbiasz coś takiego:

header('Content-Type: document/pdf');
//Jaki był oficjalny nagłówek do PDFa? :D

Wtedy powinno pójść jako pobieranie, nie jako podgląd źródła.

0

@urbiasz:
A nie możesz po prostu podawać najzwyklejszych linków do Porsche? Co to za różnica? Załóżmy, że link do PDF-a chcesz umieścić na swojej stronie o nazwie linki-do-pdfow.php. Co za problem sprawić, by generujący stronę linki-do-pdfow.php skrypt sięgnął do bazy danych i wypluł z siebie bezpośrednie URL-e do Porsche? Czy masz jakiś problem ze zrobieniem tego poniżej?

<?php
$url = pobierz_url_z_bazy_danych(); // zwraca: http://www.porsche.com/all/media/pdf/originalparts/de/D_996_KATALOG.pdf
?>
<a href="<?=  $url ?>">PDF na stronie Porsche</a>

W ten sposób możesz pobrać z bazy danych i 1000 ostatecznych URL-i, a potem zrobić po prostu echo (<?= 'dupa ?> to to samo co <?php echo 'dupa'; ?>). Dzięki temu użytkownicy Twojej strony wchodząc na linki-do-pdfow.php zobaczą najzwyklejsze, bezpośrednie linki (URL-e) do Porsche. I nikt nawet się nie dowie, że wyciągnąłeś je z bazy.

Czegoś tu chyba nie rozumiem, bo zapewne pomyślałeś o tak prostym rozwiązaniu :P.

edit:
@Demonical Monk:
Poprawny typ MIME dla dokumentów PDF to application/pdf :) (są jeszcze application/x-pdf, application/x-bzpdf i application/x-gzpdf, ale one nam tu się raczej nie przydadzą).

0

@bswierczynski:
Heheheheh, pewnie ze bylo by to najlepsze rozwiazanie:)
Tyle ze ono nie dziala :) Sprawdz, a sam zobaczysz :)

PS. Uzywajac cURLa wszystko pieknie ladnie dzial, tylko jest jedno male ale:( Strasznie wolno! W czasie zanim zaladuje sie ten plik PDF, w starym rozwiazaniu moglem zaladaowac dwa takie pliki :)

0

Skoro porsche.com blokuje hotlinkowanie, to nie ma sensu z tym walczyć, niepotrzebnie komplikujesz sprawę.

Skoro curl Ci przeszkadza tylko pod względem szybkości, to znaczy, że transfer Cię nie boli, a z kolei miejsce na dysku jest w dzisiejszych czasach tanie jak barszcz. Dlaczego więc nie trzymasz tych plików u siebie?

0

Nie trzymam ich u siebie, poniewaz firma Porsche nie zezwala na to :/ Kiedys mialem je wszystkie na swoim serwerze i strasznie sie o to pluli. A ze nie chce miec z nimi dymu, dlatego szukam innego ciekawego rozwiazania :)

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