使用PHP重定向到POST路由

时间:2015-01-08 07:14:02

标签: php laravel laravel-4

我要做的是将用户名和密码发送到larval中的GET路由,然后重定向到包含用户名,密码,client_secret和客户端ID的帖子路由,以便我可以保护客户端ID和密码,因为请求是从Android应用程序发送的。

请注意,我尝试与之通信的API是为我的应用程序显式构建的。

1 个答案:

答案 0 :(得分:2)

据我所知,使用HTTP协议无法重定向到POST请求以及POST变量(因此,PHP也无法做到这一点)。但是,使用一组解决方法可以达到相同的效果。我在这里列出其中三个。你可以选择适合你的那个。

1。使用Curl api从PHP本身发出post请求并发送所需的响应

而不是重定向(请注意,client_id和client_secret可能是您不想传输到未知客户端的安全信息)。因此,您可以直接从PHP脚本发出POST请求,并发送第二个URL / API给出的响应。

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.secondsite.com/api.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=$uname&password=$pass&client_id=$c_id");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);
curl_close ($ch);

echo $server_output; // echo the output from the second server
// You might even require to get the headers from the response and send them too

?>

2。使用HTML&amp; Javascript来发出POST请求。

<form action='api.php' method='post' name='frm'>
<?php
    echo "<input type='hidden' name='username' value='$username'>";
    echo "<input type='hidden' name='password' value='$pass'>";
    echo "<input type='hidden' name='client_secret' value='$client_sec'>";
    echo "<input type='hidden' name='client_id' value='$client_id'>";
?>
</form>
<script language="JavaScript">
    document.frm.submit();
</script>

这个想法很简单。 PHP页面以包含您打算作为隐藏输入发布的所有字段的表单进行响应。然后一些内联的Javascript立即提交表单。

3。如果脚本都在同一主机上运行,​​请使用SESSION Variables

并将GET请求重定向到第二个URL。请注意,两个脚本必须位于同一服务器上才能使其正常工作。 您可以在此处阅读如何使用PHP会话:How to use PHP Sessions