#1 10.02.09 00:41
Передача переменной методом POST
Нужно передать некоторые данные между двумя скриптами расположенными на разных хостах. Методом GET я делаю это так:
файл test.php на серевере www.sitename1.com
---
<?php
header("Location: http://www.sitename2.net/index.php?data1=";.$data1."&data2=".$ data2);
?>
----
файл index.php на сервере www.sitename2.net
---
<?php
$gData1 = $_GET['data1'];
$gData2 = $_GET['data2'];
?>
----
Как можно аналогичным образом передать данные, используя метод POST?
Для большей понятности скажу по другому: мне нужно передать данные методом POST от одного PHP скрипта другому PHP скрипту, на разных серверах. Без использования дополнительных средств: javascript и html форм и т.д. Как я это делаю методом GET см. выше.
Мож кто сталкивался? Я уже пару часов бьюсь над этим, никак не получается :( Мне нужна именно передача с последующим редиректом на эту страницу!
Offline
#2 10.02.09 01:32
Re: Передача переменной методом POST
что ты хочешь я понял, но не вижу выхода, кроме вставки формы со скрытыми инпутами и переходом по action куда тебе надо.
Как я понял, тебе надо передать данные скрытые от пользователя данные с одного сервера на другой. Попробуй использовать cookies.
Исправлено Клавишник (10.02.09 01:32)
Offline
#3 10.02.09 08:01
Re: Передача переменной методом POST
Клавишник написал(а):
Как я понял, тебе надо передать данные скрытые от пользователя данные с одного сервера на другой. Попробуй использовать cookies.
Куки тут не помогут, т.к. скрипт расположенный в sitename2 не сможет читать куки установленные sitename1. Максимум что они могут это чтобы поддомены могли читать куки, если напрямую указывается домен, четвертый вроде параметр.
А методом пост такую штуку не сделать, локейшн передает необработанный хеадер, поэтому в твоем случае только гет. А чем тебя гет не устраивает? и чем тебя не устраивает скрытая форма? будет и редирект на другую страницу и данные в посте уйдут.
Исправлено chmaxx (10.02.09 08:03)
Offline
#4 10.02.09 08:50
Re: Передача переменной методом POST
Да, с куками не получиться, согласен.
chmaxx написал(а):
А чем тебя гет не устраивает?
Ну например есть сайт, чужой, с какой-то формой которая переменные методом POST передает и надо передать ему параметры, например залогиниться автоматом или т.п.
chmaxx написал(а):
чем тебя не устраивает скрытая форма?
натыкался на это решение, но надеялся найти что-то поизящнее :)
Offline
#5 10.02.09 10:22
Re: Передача переменной методом POST
Кощей написал(а):
Да, с куками не получиться, согласен.
chmaxx написал(а):
А чем тебя гет не устраивает?
Ну например есть сайт, чужой, с какой-то формой которая переменные методом POST передает и надо передать ему параметры, например залогиниться автоматом или т.п.
Ну это как бы хак, и если чужой сайт делали нормальные программисты, то они реферер проверяют.
Offline
#6 10.02.09 13:56
Re: Передача переменной методом POST
ну так это на пхп элементарно делается.
1. берём прогу wireshark, ставим, включаем мониторинг трафика и ставим фильтр "http" (ну или можно использовать любую прогу, которая http заголовки может читать)
2. логинимся на нужный сайт с помощью любого браузера
3. смотрим, что он отправил серверу
4. в пхп есть функция header(); которая отправляет заголовки в том виде, как их напишешь.
5. вот этими заголовками набираем всю ту же последовательность, которую отправляет браузер серверу.
Вот так данные передаются хоть каким методом. Основная проблема совсем не в этом, а в том, что потом скрипт должен обработать ответ от сервера и эмулировать сохранение куки у себя, если это авторизация.
Чтобы не заморачиваться самому, на PEAR и прочих фреймворках, написаны сотни готовых подобных эмуляторов. Проще их поискать
Offline
#8 10.02.09 19:00
Re: Передача переменной методом POST
Antony, попробовал. нифига не вышло. Заголовки оказались такими как и предполагалось (до этого также пробывал отправлять). Попробовал еще раз в различных вариациях - не помогает. Опера предлагает сохранить файл, но не сохраняет, а експлорер ничего не делает.
Antony написал(а):
Основная проблема совсем не в этом, а в том, что потом скрипт должен обработать ответ от сервера и эмулировать сохранение куки у себя, если это авторизация.
Как раз такой проблемы нет! Ведь все же в томже окне должно делаться. Скрипт не должен ничего обрабатывать, а должен просто методом POST послать данные.
Offline
#9 10.02.09 22:23
Re: Передача переменной методом POST
Кощей написал(а):
Как раз такой проблемы нет! Ведь все же в томже окне должно делаться. Скрипт не должен ничего обрабатывать, а должен просто методом POST послать данные.
проблема есть)
потому что окно - на компе у юзера, а скрипт - на сервере) у юзера и у сервера разные айпи. поэтому напрямую данные и не послать. скрипт в любом случае будет посредником. т.е. скрипт может слать всё правильно, ему открывается сессия, но эта сессия не находится в окне у юзера и ему не принадлежит.
Когда ты отсылаешь юзера редиректом по ссылке с переменными - ты даёшь директиву браузеру юзера, а когда со скрипта посылаешь методом пост - браузер никаких директив не получит.
если нужно напрямую заставить браузер отослать что-то методом пост - поможет только скрытая форма и яваскрипт. можно ещё без скрытой формы аяксом. но по-другому никак.
Я так понимаю даже, что подобный редирект сессии от скрипта браузеру противоречил бы всем нормам безопасности.
вопрос-то стоял конкретно:
Кощей написал(а):
Нужно передать некоторые данные между двумя скриптами расположенными на разных хостах
если нужно заставить браузер передать что-то методом пост - то вопрос задан некорректно.
Offline
#10 11.02.09 01:04
Re: Передача переменной методом POST
Antony, сначала хотел возразить, но потом еще пару раз перечитал и понял что ты наверное прав :)
Едиственное что, вопрос был и конкретный и корректный:
Кощей написал(а):
Нужно передать некоторые данные между двумя скриптами расположенными на разных хостах. Методом GET я делаю это так:
------
Как можно аналогичным образом передать данные, используя метод POST?
и даже был перефразирован для большей внятности.
Тему можно считать закрытой так как выснили, что напрямую методом POST данные так передать нельзя.
Offline

