Как отправить данные поста на любой URL (с перенаправлением) без использования curl или fsocket в php - PullRequest
0 голосов
/ 03 февраля 2010

Я бы хотел, чтобы моя страница была перенаправлена ​​на новый URL с некоторыми данными поста. Я не хочу использовать curl или fsocket, потому что они не будут перенаправлять пользователя на этот новый URL.

Есть ли альтернатива для заголовка ("Location: blahblahblah"); отправить данные поста? Я пытался с document.form.submit (); и это сработало, но некоторые пользователи сталкиваются с проблемой с JavaScript.

Может ли кто-нибудь предложить альтернативное решение для этого? Есть ли какая-либо функция php для перенаправления пользователя на новый URL-адрес вместе с отправкой некоторых почтовых данных на этот URL-адрес

Заранее спасибо.

Ответы [ 5 ]

1 голос
/ 03 февраля 2010
function do_post_request($url, $data, $optional_headers = null)
  {
     $params = array('http' => array(
                  'method' => 'POST',
                  'content' => $data
               ));
     if ($optional_headers !== null) {
        $params['http']['header'] = $optional_headers;
     }
     $ctx = stream_context_create($params);
     $fp = @fopen($url, 'rb', false, $ctx);
     if (!$fp) {
        throw new Exception("Problem with $url, $php_errormsg");
     }
     $response = @stream_get_contents($fp);
     if ($response === false) {
        throw new Exception("Problem reading data from $url, $php_errormsg");
     }
     return $response;
 }

Посмотрите эту ссылку http://netevil.org/blog/2006/nov/http-post-from-php-without-curl

0 голосов
/ 03 февраля 2010

Альтернативные решения, если вам просто нужно передать данные, но POST не обязателен:

  • перенаправить пользователя и передать данные через строку запроса
  • сохранить данные в сеансе и перенаправить пользователя
0 голосов
/ 03 февраля 2010

Вы не можете имитировать поведение формы с помощью PHP.Вы можете отправлять данные POST, но не перенаправлять пользователя с тем же запросом.Вам нужно будет сделать это с помощью формы.Как описывает Игорь, с помощью Javascript можно изменить ожидаемое поведение форм, но я бы рекомендовал против этого.

0 голосов
/ 03 февраля 2010

канонический способ сделать редирект с помощью javascript, верно? вам нужна простая страница, где вы:

а) сгенерируйте форму с URL-адресом действия, которым вы хотите перейти

б) напишите скрытые поля для хранения ваших post_data

в) javascript отправил вам форму при загрузке

0 голосов
/ 03 февраля 2010

Что не так с использованием header("Location: $new_url")? Это выполняет перенаправление и является правильным способом сделать это ПОСЛЕ POST ing data.

Редактировать: Обновлено, чтобы пояснить, что данные публикуются не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...