Перенаправление с HTTP-запросом POST - PullRequest
2 голосов
/ 08 марта 2020

Я знаю, что этот вопрос задавался много раз, но я всегда находил разные и неудовлетворительные ответы ...

Итак, в последний раз (я надеюсь), как я могу перенаправить на другой? страницы путем отправки HTTP POST запросов?

Это действительно распространенная вещь, например, когда я хочу отправить массив, который не должен существовать после этого запроса, или когда Я хочу заполнить недействительную форму входа в систему старыми данными (поскольку GET слишком небезопасен для таких действий)

  1. Первый совет, который я обычно нахожу, - это использовать cURL или file_get_contents , но проблема этих методов в том, что они не позволяют использовать относительные URL, поэтому я должен определить константу, содержащую комбинацию $ _ SERVER переменные, которые позволяют мне использовать их в любом случае. Но так как мне нужно отправлять HTTP POST запросы из разных мест на мой веб-сайт, и нет способа автоматически включать файл определения в каждый php на моем веб-сайте, я должен переписать одно и то же определение каждый раз, когда мне нужен относительный путь
  2. Второй совет использует HTML форму , но он требует ввода данных пользователем и (что менее важно) это не такая удобочитаемая вещь

Я бы хотел что-то вроде header("Location: ..?user=admin"), но вместо ?user=admin, который отправляет user => admin в GET , способ отправить user => admin в POST

РЕДАКТИРОВАТЬ: пример

index. php ----- -----> data. php (форма входа) (не отображается, просто php)

, если я допущу ошибку в индексе . php, data. php отправляет обратно правильные данные в индекс . php, чтобы пользователь мог исправить свои неправильные записи, не переписывая все.

Но с Форма в данных. php пользователь будет нажимать отправить еще раз после отправки формы ...

РЕДАКТИРОВАТЬ # 2:

Даже используя cURL Я не могу получить никакого полезного результата

//data.php

<?php

define("URL", "http://" . $_SERVER["HTTP_HOST"] . rtrim(dirname($_SERVER["PHP_SELF"]), "/\\"));

$new = array();

//adding variables to $new
$new['first'] = 1;
$new['second'] = 2;

function head($url)
{
    $url = URL . $url;

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, count($GLOBALS['new']));   //number of POST data
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($GLOBALS['new']));  //POST data

    if(!curl_exec($curl)) header("Location: .?error=curl");
    curl_close($curl);

    header("Location: $url");
}

head(".?result=success");

//index.php

<?= count($_POST); //this should be 1 ($new array)?>

Я всегда получаю вывод: 0 вместо 1 в индексе. php.

...