Daniel Suszczyński

Daniel Suszczyński Head of Software
Engineering

Temat: Redirect to external link z POST - jak zrobić?

Witam,
proszę o pomoc jak zrobić redirecta na obcy adres url wraz z wysłaniem POST'a na ten adres w Zend?

Pozdrawiam,
Daniel
Andrzej Błaszczyk

Andrzej Błaszczyk Programowanie,
e-marketing,
e-commerce

Temat: Redirect to external link z POST - jak zrobić?

Witam,

wydaje mi się, że nie ma innej opcji jak Java Script i autosubmit formularza.

Redirect = header Location, który realizuje przeglądarka. Nie spotkałem się z Nagłówkiem odpowiedzi, który definiowałby dane do przesłania pod inny adres czy też metodę ich przesłania POST/PUT itd.

Pozdrawiam

konto usunięte

Temat: Redirect to external link z POST - jak zrobić?

Tak bezpośrednio tego z poziomu php/zend nie da się zrobić przeglądarkę do przejścia pod inny adres można zmusić wysyłając w nagłówkach odpowiedzi HTTP parametr Location. Wartością tego parametru jest URL strony na którą chcemy przekierować użytkownika (może on zawierać parametry ale tylko GET).

Sposób na obejście tego problemu może być taki:
- przekierować użytkownika na stronę, na której jest ukryty formularz, którego pola odpowiadają nazwą parametrów POST, które chcemy ustalić
- formularz ma oczywiście ustawiony odpowiedni target i method
- po załadowaniu strony z poziomu js należy wykonać submit dla tego formularza

konto usunięte

Temat: Redirect to external link z POST - jak zrobić?

ZF za bardzo Ci tutaj nie pomoże. Na upartego mógłbyś skorzystać z Zend_Http_Client, ale nie będzie się to niczym różniło od standardowego curla.
Zamiast wysyłać JavaScriptem ukryty formularz możesz wysłać posta wspomnianym curlem (lub przy użyciu kontekstów), sprawdzić jaka była odpowiedź serwera i przekierować na nią użytkownika. Jeśli jednak na docelowej stronie wiele się dzieje po wysłaniu posta, to nie zostaje nic innego jak ukryty formularz.

konto usunięte

Temat: Redirect to external link z POST - jak zrobić?

Cześć, zakładam, że jeżeli pytasz o ZF, to masz na myśli wysłanie POSTa po stronie serwera.

W takim przypadku, tak jak napisał Maciek, Zend_Http_Client, konkrety: http://framework.zend.com/manual/en/zend.http.client.a... - masz wszystko opisane.

Jeżeli chodzi o coś innego - doprecyzuj pytanie.
Daniel Suszczyński

Daniel Suszczyński Head of Software
Engineering

Temat: Redirect to external link z POST - jak zrobić?

Jakub Kułak:
Cześć, zakładam, że jeżeli pytasz o ZF, to masz na myśli wysłanie POSTa po stronie serwera.

W takim przypadku, tak jak napisał Maciek, Zend_Http_Client, konkrety: http://framework.zend.com/manual/en/zend.http.client.a... - masz wszystko opisane.

Jeżeli chodzi o coś innego - doprecyzuj pytanie.
Próbowałem tak:

$adapter = new Zend_Http_Client_Adapter_Curl();
$client = new Zend_Http_Client();
$client->setUri($url);
$client->setAdapter($adapter);
$adapter->setConfig(array('strictredirects' => false,'curloptions' => array(CURLOPT_FOLLOWLOCATION => true,CURLOPT_SSL_VERIFYPEER=>false)));
$client->setHeaders('Referer', $url);
$client->request(Zend_Http_Client::POST);


ale za nic przeglądarka nie chce przeładować strony na tą na którą kieruję POST'a :( Co zastanawiające ustawienie header'a location na "jakiś" url też nie skutkuje. Czy to możliwe że Zend w jakiś sposób to blokuje? (pracuje na wersji 1.11.2) Ogólnie przejście na "jakiś" adres działa tylko korzystając z _redirect();Daniel Suszczyński edytował(a) ten post dnia 25.01.11 o godzinie 19:01

konto usunięte

Temat: Redirect to external link z POST - jak zrobić?

Curl i wszystkie nakładki na niego nie przekieruję Ciebie na docelową stronę.
Jeśli header nie działa, to sprawdź, czy nie masz jakichś błędów (warning, notice) lub dowolnego innego "outputu" na stronie. Wszystko co jest wyświetlone przed header (nawet białe znaki) może uniemożliwić jego działanie.

konto usunięte

Temat: Redirect to external link z POST - jak zrobić?

Tak jak już napisano powyżej Zend_Http_Client nie ma wpływu na przeglądarkę z której wywoływany jest URL prowadzący do skryptu PHP z podanym przez CIebie kodem.

Zend_Http_Client jak sama nazwa wskazuje jest klientem HTTP (podobnie jak przeglądarka internetowa) uruchamianym po stronie serwera. Podany przez Ciebie kod prawdopodobnie działa (nie generuje błędów), żeby to sprawdzić proponuję dokonać małych zmian


$response = $client->request(Zend_Http_Client::POST);
var_dump($response -> getBody());

(Metoda Zend_Http_Client::request() zwraca obiekt Zend_Http_Response)

To pomoże Ci zrozumieć zasadę działania Zend_Http_Client.Artur Górski edytował(a) ten post dnia 25.01.11 o godzinie 08:38
Andrzej Błaszczyk

Andrzej Błaszczyk Programowanie,
e-marketing,
e-commerce

Temat: Redirect to external link z POST - jak zrobić?

Myślę, że warto sytuację wyjaśnić. Zend_Http_Client udaje przeglądarkę w ramach php. Jeżeli potrzebujesz oglądającego przesłać pod adres x wraz z danymi POST - nie masz wyboru - musisz użyć ukrytego formularza.

Proponuję zupełnie pustą stronę, gdzie w formularzu z display = none masz pola dokładnie takie jak chcesz przesłać. Dla body onload ustawiasz funkcję, która wykona submit formularza i gotowe. Innej drogi nie ma.

Pozdrawiam
Andrzej Błaszczyk

Andrzej Błaszczyk Programowanie,
e-marketing,
e-commerce

Temat: Redirect to external link z POST - jak zrobić?

Myślę, że warto sytuację wyjaśnić. Zend_Http_Client udaje przeglądarkę w ramach php. Jeżeli potrzebujesz oglądającego przesłać pod adres x wraz z danymi POST - nie masz wyboru - musisz użyć ukrytego formularza.

Proponuję zupełnie pustą stronę, gdzie w formularzu z display = none masz pola dokładnie takie jak chcesz przesłać. Dla body onload ustawiasz funkcję, która wykona submit formularza i gotowe. Innej drogi nie ma.

Pozdrawiam
Daniel Suszczyński

Daniel Suszczyński Head of Software
Engineering

Temat: Redirect to external link z POST - jak zrobić?

Dziękuję za wszystkie odpowiedzi. Szkoda, że nie da się zrobić tego co chciałem, ale przynajmniej wiem jak się sprawy mają :-)

Pozdrawiam



Wyślij zaproszenie do