Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] redirect z danymi POST
Cezar708
post
Post #1





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


Cześć,

mam skrypt pod lokalizacją: http://localhost/home.php w pliku home.php zrobić redirect na localizację http://innyserwer/odbierz.php ale jednocześnie dane muszą być przesłane POSTem.

próbowałem następującej metody:

  1. <?php
  2. function redirectByPOSTMethod($url, $datas) {
  3.    preg_match('///(w+)(/.+)/', $url, $m);
  4.    $host = $m[1];
  5.    $path = $m[2];
  6.    $data = urlencode(http_build_query($datas));
  7.    header("POST $path HTTP/1.1r\n");
  8.    header("Host: $hostr\n" );
  9.    header("Content-type: application/x-www-form-urlencodedr\n");
  10.    header("Content-length: " . strlen($data) . "r\n");
  11.    header("Connection: closer\nr\n");
  12.    header($data);
  13.  }
  14.  
  15. redirectByPOSTMethod('http://innyserwer/odbierz.php', array('asdf'=>'1234', 'asdf1234'=>'asf'));
  16. ?>


niestety firefox zamiast przejść na serwer próbuje zapisać plik :|

co zrobić aby nastąpił normalny redirect...

Pozdrawiam
Cezar708
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
sowiq
post
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Twoja metoda wysyła nagłówki z serwera do przeglądarki. A Ty musisz zrobić to w drugą stronę.

Szczerze mówiąc to wątpię, czy ze względów bezpieczeństwa przeglądarka pozwoli Ci na przekierowywanie danych POST. Ale próbuj - pewnie jakieś rozwiązanie jest. Nie mniej jednak Twoje jest z założenia błędne.
Go to the top of the page
+Quote Post
Cezar708
post
Post #3





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


sowiq wszystko wskazuje, że faktycznie masz rację... nie mniej nie wierzę, że nie ma możlwości przekierowania danych z POST na inną lokalizację.

Przecież skoro:
  1. <?php
  2. header("Location: nowa.lokalizacja.php?z_danymi=get-dziala");
  3. ?>


to dlaczego nie możnaby było tego robić również z POST?

Musi być jakieś w miarę normalne rozwiązanie...
Go to the top of the page
+Quote Post
Spawnm
post
Post #4





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




można ale raczej nie header winksmiley.jpg
poczytaj np o cURL:
http://wortal.php.pl/wortal/artykuly/php/b...http/formularze
Go to the top of the page
+Quote Post
sowiq
post
Post #5





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(Cezar708 @ 24.03.2009, 10:04:12 ) *
to dlaczego nie możnaby było tego robić również z POST?
Bo mówisz przeglądarce: przejdź teraz na adres domena.com/?dane_get. I tak na prawdę dla przeglądarki te dane GET to nic innego jak część adresu.

Dane POST znajdują się w nagłówkach wysyłanych przez przeglądarkę. A czy możesz zmusić przeglądarkę do ich wysłania? Nie wiem. Raczej nie, bo byłaby to poważna luka w bezpieczeństwie.

Jeśli już, to nie PHP, tylko coś co działa po stronie przeglądarki. Czytaj: JavaScript/AJAX. Ajaxem można przecież wysyłać dane POST.
Go to the top of the page
+Quote Post
Cezar708
post
Post #6





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


Spawnm niestety cURL nie załatwi mojego problemu, ponieważ co najwyżej jestem w stanie wysłać request do "innyserwer/odbierz.php" i obsłużyć mi go w "localhost/home.php", więc nie ma tutaj żadnego przekierowania. Nie będę na "innyserwer/odbierz.php" tylko nadal w "localhost/home.php".

sowiq tak samo Twoje rozwiązanie nie załatwia mojego problemu... bo mam podwójny request od przeglądarki co jak wiadomo nie sprzyja ogólnie pojętemu "User Experience", więc trochę to może pomulić.

No cóż niestety chyba nie da się z tym nic ciekawego zrobić, szukałem na innych forach i trafiłem na post Is it possible to send POST vars through a header redirect?, co chyba ukręca łeb sprawie.

No nic, czeka mnie więc gimnastyka artystyczna z udziałem PHP aby ten problem ominąć.

pozdrawiam
Cezar708

[EDIT] no chyba, że macie jeszcze jakieś pomysły...
Go to the top of the page
+Quote Post
sowiq
post
Post #7





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Pytanie tylko - po co? smile.gif

Załóżmy, że chcesz zobaczyć jakie dane user wysyła POST'em i gdzieś je zapisać. Ja bym zrobił to zupełnie inaczej niż Ty zakładasz:
1. Mam formularz z action ustawionym na localhost i target'em na ramkę (oczywiście w dokumencie mam ukrytą ramkę iframe, 1x1px).
2. Klikam submit formularza - w mojej ramce ładuje się localhost - odczytuję sobie na serwerze wysłane dane
3. Po odczytaniu potrzebnych danych odbieram w ramce wygenerowany na serwerze kod JS
4. Kod JS w nadrzędnej ramce znajduje formularz (np. po ID), zmienia mu action na google.pl i wywołuje na nim metodę submit().
5. Tym sposobem masz dane POST wysłane na swój serwer, a user jest na stronie google.pl

Ew. można to zrobić bardziej elegancko - wysyłać dane na Twój serwer za pomocą Ajax. Ale w obu przypadkach user musi mieć obsługę JS. No ale nie oszukujmy się - 99% użytkowników ją ma.

Proste jak barszcz winksmiley.jpg

Ten post edytował sowiq 24.03.2009, 10:52:54
Go to the top of the page
+Quote Post
Cezar708
post
Post #8





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


Cytat(sowiq @ 24.03.2009, 10:50:39 ) *
Załóżmy, że chcesz zobaczyć jakie dane user wysyła POST'em i gdzieś je zapisać. Ja bym zrobił to zupełnie inaczej niż Ty zakładasz:


źle zakładasz, nie chcę oglądać jakie dane przesyłane postem, a sam chcę zbudować requesta postem, i to nie na podstawie danych otrzymanych od użytkownika, więc poniższa rada:
Cytat(sowiq @ 24.03.2009, 10:50:39 ) *
1. Mam formularz z action ustawionym na localhost i target'em na ramkę (oczywiście w dokumencie mam ukrytą ramkę iframe, 1x1px).
2. Klikam submit formularza - w mojej ramce ładuje się localhost - odczytuję sobie na serwerze wysłane dane
3. Po odczytaniu potrzebnych danych odbieram w ramce wygenerowany na serwerze kod JS
4. Kod JS w nadrzędnej ramce znajduje formularz (np. po ID), zmienia mu action na google.pl i wywołuje na nim metodę submit().
5. Tym sposobem masz dane POST wysłane na swój serwer, a user jest na stronie google.pl

... traci na wartości

Cytat(sowiq @ 24.03.2009, 10:50:39 ) *
Ew. można to zrobić bardziej elegancko - wysyłać dane na Twój serwer za pomocą Ajax. Ale w obu przypadkach user musi mieć obsługę JS. No ale nie oszukujmy się - 99% użytkowników ją ma.

Nawet jakbyśmy się zrozumieli to musisz wiedzieć, że takie eleganckie nigdy nie zadziała. Wcześniej mówiłeś o bezpieczeństwie to musisz wiedzieć, że pomiędzy dwoma różnymi domenami nie wywołasz "ajaxowego" requesta. Dlaczego? Myślę, że szybko sam sobie odpowiesz.

Cytat(sowiq @ 24.03.2009, 10:50:39 ) *
Proste jak barszcz winksmiley.jpg

... niekoniecznie... to jest niestety niewykonalne.

Jedyne co mógłbym zrobić to ukryty formularz po stronie widoku, ale do niego nie mam dostępu (stąd inna domena... nie moja). Użytkownicy tej - nie-mojej domeny wysyłaja do mnie normalnie GETem dane. Ja określam wszelkie potrzebne mi dane, na tej podstawie tworzę dane, które muszę wysłać jeszcze do innego serwera...

... więc niestety pozostała mi jedyna opcja, utworzenia formularza i jego automatyczny submit, podobna do tej co sam napisałeś w jednym z wcześniejszych postów. Niestety nic innego lepszego nie byłem w stanie wymyśleć.

Pozdrawiam
Cezar708
Go to the top of the page
+Quote Post
sowiq
post
Post #9





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(Cezar708 @ 24.03.2009, 12:57:41 ) *
źle zakładasz, nie chcę oglądać jakie dane przesyłane postem, a sam chcę zbudować requesta postem, i to nie na podstawie danych otrzymanych od użytkownika
Wiesz, nie napisałeś tego wcześniej.

Nic nie stoi na przeszkodzie, żebyś na podstawie danych wysłanych na Twój serwer przez Ajaxa zbudował formularz (w HTML), wrzucił go do drzewa DOM stronki i zasubmitował JS'em po stronie użytkownika. Moim zdaniem jest to całkiem dobre rozwiązanie. Ale jak uważasz, tak zrobisz.

Pozdrawiam.
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A jaki problem wygenerować unikalny identyfikator, wrzucić formularz w sesję i przekazać via GET ten identyfikator? Dane będą, zadziała przez JS. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
rzymek01
post
Post #11





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


a czemu uparłeś się że nie można przekazać dane przez GETa?

możesz zserializowac dane i wrzucic w GETa, nastapnie na inny serwer, który odbierze te dane i szybko z długiego adresu przeniesie przez [301] na ładny adres tongue.gif

PS. z sesjami mi się to nie widzi


--------------------
:]
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
PS. z sesjami mi się to nie widzi

Niby czemu? winksmiley.jpg Ale oczywiście, tylko w ramach jednego serwera.

GET ma ograniczenie do 1024 znaków...


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
sowiq
post
Post #13





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(rzymek01 @ 24.03.2009, 22:10:36 ) *
a czemu uparłeś się że nie można przekazać dane przez GETa?
Z tego co ja zrozumiałem, to ma to działać następująco:
1. wysyłamy jakieś zapytanie do naszego serwera (GET/POST/whatever)
2. nasz serwer parsuje to zapytanie i wysyła odpowiedź
3. po odebraniu odpowiedzi przeglądarka wysyła POST'em otrzymane przed chwilą jakieś dane na całkiem inną stronę

Jak dla mnie jedynym wyjściem jest zasubmitowanie przez JS kjakiegoś ukrytego formularza, bo nie da się tak przekierować przeglądarki, żeby automatycznie wysłała żądanie POST. M.in. ze względów bezpieczeństwa.
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 Aktualny czas: 22.08.2025 - 07:47