with variable uso another php forms post scripting

variable - PHP-Redirigir y enviar datos a través de POST



php redirect with post (14)

Tengo una puerta de enlace en línea que requiere que se envíe un formulario HTML con campos ocultos. Necesito hacer esto a través de un script PHP sin formularios HTML (tengo los datos para los campos ocultos en un DB)

Para hacer esto, envía datos a través de GET:

header(''Location: http://www.provider.com/process.jsp?id=12345&name=John'');

¿Y para hacer esto enviando datos a través de POST?


Alternativamente, establecer una variable de sesión antes de la redirección y probarla en la url de destino puede resolver este problema para mí.


Encontré una solución mejor y más ordenada, así que pensé que debería compartirla:

Usa la sesión:

$_SESSION[''POST''] = $_POST;

y para la solicitud de encabezado de redirección, debe usar:

header(''Location: http://www.provider.com/process.jsp?id=12345&name=John'', true, 307;)

307 es el htttp_response_code que puede usar para la solicitud de redireccionamiento con valores POST enviados.


Implicaría la extensión cURL PHP.

$ch = curl_init(''http://www.provider.com/process.jsp''); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "id=12345&name=John"); curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); // RETURN THE CONTENTS OF THE CALL $resp = curl_exec($ch);


No puedes hacer esto usando PHP.

Como han dicho otros, podría usar cURL, pero luego el código PHP se convierte en el cliente y no en el navegador.

Si debe usar POST, entonces la única forma de hacerlo sería generar el formulario rellenado usando PHP y usar el gancho window.onload para llamar a javascript y enviar el formulario.

DO.


Otra solución si desea evitar una llamada curl y hacer que el navegador redirija como lo hace normalmente y que imite una llamada POST:

guarde la publicación y realice una redirección temporal:

function post_redirect($url) { $_SESSION[''post_data''] = $_POST; header(''Location: '' . $url); }

Luego siempre verifique la variable de sesión post_data :

if (isset($_SESSION[''post_data''])) { $_POST = $_SESSION[''post_data'']; $_SERVER[''REQUEST_METHOD''] = ''POST''; unset($_SESSION[''post_data'']); }

Habrá algunos componentes faltantes, como apache_request_headers () no mostrará un encabezado de contenido POST, etc.


Sí, puedes hacer esto en PHP, por ejemplo, en

Silex o Symfony3

usando subrequest

$postParams = array( ''email'' => $request->get(''email''), ''agree_terms'' => $request->get(''agree_terms''), ); $subRequest = Request::create(''/register'', ''POST'', $postParams); return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false);


Una publicación anterior, pero aquí es cómo lo manejé. Usando el método de newms87:

if($action == "redemption") { if($redemptionId != "") { $results = json_decode($rewards->redeemPoints($redemptionId)); if($results->success == true) { $redirectLocation = $GLOBALS[''BASE_URL''] . ''rewards.phtml?a=redemptionComplete''; // put results in session and redirect back to same page passing an action paraameter $_SESSION[''post_data''] = json_encode($results); header("Location:" . $redirectLocation); exit(); } } } elseif($action == "redemptionComplete") { // if data is in session pull it and unset it. if(isset($_SESSION[''post_data''])) { $results = json_decode($_SESSION[''post_data'']); unset($_SESSION[''post_data'']); } // if you got here, you completed the redemption and reloaded the confirmation page. So redirect back to rewards.phtml page. else { $redirectLocation = $GLOBALS[''BASE_URL''] . ''rewards.phtml''; header("Location:" . $redirectLocation); } }


Una solución que funciona perfectamente:

En la página de origen, comience a abrir una sesión y asigne tantos valores como desee. Luego haga la reubicación con "encabezado":

<!DOCTYPE html> <html> <head> <?php session_start(); $_SESSION[''val1''] = val1; ... $_SESSION[''valn''] = valn; header(''Location: http//Page-to-redirect-to''); ?> </head> </html>

Y luego, en la página de destino:

<!DOCTYPE html> <?php session_start(); ?> <html> ... <body> <?php if (isset($_SESSION[''val1'']) && ... && isset($_SESSION[''valn''])) { YOUR CODE HERE based on $_SESSION[''val1'']...$_SESSION[''valn''] values } ?> </body> </html>

No es necesario Javascript ni JQuery. ¡Buena suerte!


Use curl para esto. Google para "curl php post" y encontrarás esto: http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html .

Tenga en cuenta que también puede usar una matriz para la opción CURLOPT_POSTFIELDS. De los documentos de php.net:

La información completa para publicar en una operación HTTP "POST". Para publicar un archivo, anteponga un nombre de archivo con @ y use la ruta completa. Esto se puede pasar como una cadena urlencoded como ''para1 = val1 & para2 = val2 & ...'' o como una matriz con el nombre del campo como clave y datos de campo como valor. Si value es una matriz, el encabezado Content-Type se establecerá en multipart / form-data.


Utilicé el siguiente código para capturar los datos POST que se enviaron desde form.php y luego concatenarlo en una URL para enviarlo de vuelta al formulario para correcciones de validación. Funciona como un amuleto y, de hecho, convierte datos POST en datos GET.

foreach($_POST as $key => $value) { $urlArray[] = $key."=".$value; } $urlString = implode("&", $urlArray); echo "Please <a href=''form.php?".$urlString."''>go back</a>";



aquí está la muestra de solución.

function redirect_post($url, array $data) { ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript"> function closethisasap() { document.forms["redirectpost"].submit(); } </script> </head> <body onload="closethisasap();"> <form name="redirectpost" method="post" action="<? echo $url; ?>"> <?php if ( !is_null($data) ) { foreach ($data as $k => $v) { echo ''<input type="hidden" name="'' . $k . ''" value="'' . $v . ''"> ''; } } ?> </form> </body> </html> <?php exit; }


fsockopen abrir un socket en el sitio con fsockopen y simular una HTTP-Post-Request. Google le mostrará muchos fragmentos de cómo simular la solicitud.


/** * Redirect with POST data. * * @param string $url URL. * @param array $post_data POST data. Example: array(''foo'' => ''var'', ''id'' => 123) * @param array $headers Optional. Extra headers to send. */ public function redirect_post($url, array $data, array $headers = null) { $params = array( ''http'' => array( ''method'' => ''POST'', ''content'' => http_build_query($data) ) ); if (!is_null($headers)) { $params[''http''][''header''] = ''''; foreach ($headers as $k => $v) { $params[''http''][''header''] .= "$k: $v/n"; } } $ctx = stream_context_create($params); $fp = @fopen($url, ''rb'', false, $ctx); if ($fp) { echo @stream_get_contents($fp); die(); } else { // Error throw new Exception("Error loading ''$url'', $php_errormsg"); } }