Нет возможности сделать это напрямую с сервера, так как данные POST должны отправляться браузером.
Но вы можете выбрать альтернативу:
- Предварительно заполненная форма, автоматически переданная в ваш пример, может работать, но, как вы написали, это не очень хорошая практика и может оставить пользователей на пустой странице
- Получите аргументы GET и отправьте их с помощью curl (или любого другого приличного http-клиента) на второй сайт, а затем передайте результат в браузер. Это называется прокси и может быть хорошим решением imho.
- Выполните совместное использование сеанса в домене, это может быть невозможно при всех настройках и может быть сложным.
После завершения настройки совместное использование сеанса становится практически прозрачным для php-кода. Если у вас есть более чем одна потребность в связи между двумя доменами, возможно, стоит сделать это.
Пример с решением curl, код для запуска в домене 1:
//retrieve GET parameters as a string like arg1=0&arg1=56&argn=zz
$data = $_SERVER['QUERY_STRING'];
// Create a curl handle to domain 2
$ch = curl_init('http://www.domain2.com/target_script.php');
//configure a POST request with some options
curl_setopt($ch, CURLOPT_POST, true);
//put data to send
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//this option avoid retrieving HTTP response headers in answer
curl_setopt($ch, CURLOPT_HEADER, 0);
//we want to get result as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//if servers support is and you want result faster, allow compressed response
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
//execute request
$result = curl_exec($ch);
//show response form domain 2 to client if needed
echo $result;
Вот и все, браузер вашего клиента даже не увидит сервер домена 2, он получит только результат от него. знать, если вы хотите перенаправить клиента в домен, делайте это с классическим заголовком http.
header('Location: http://www.domain2.com');
Конечно, это демонстрационный код с жестко закодированными значениями, и вам осталось 2 пункта:
- Безопасность: строка запроса должна быть отфильтрована или воссоздана для передачи только необходимых параметров, и вы должны подтвердить, что сервер домена 2 возвратил HTTP-код 200.
- Логика приложения в этой части нуждается в небольшой корректировке: если приложение домена 2 ожидает получения данных поста в том же запросе, что и посетитель, он не будет этого делать. С точки зрения домена 2, клиент, выполняющий запрос POST, будет хост-сервером домена 1, а не браузером клиента, важно, если IP-адрес клиента имеет значение или другие проверки клиента выполняются в домене 2.
Если запрос POST служит для отображения специфичного для клиента контента, вам также нужно было выполнить некоторое отслеживание на стороне сервера, чтобы объединить ранее опубликованные данные с перенаправленным посетителем.
Надеюсь, теперь все понятно и поможет вам