【问题标题】:Redirect with an HTTP Post instead of a simple link, using PHP使用 PHP 使用 HTTP Post 而不是简单链接进行重定向
【发布时间】:2011-04-16 00:26:46
【问题描述】:

我有一个杂志出版商的网站,该网站有一个标准超链接到另一个托管该杂志电子版的网站。电子杂志托管站点有它的 owm,每个出版物,身份验证方案,每个用户每个 mag。为了避免杂志订阅者必须同时登录这两个网站,双方已就一种握手方式达成一致。

当重定向到杂志主机站点时,我必须发布一个带有一些值的小型 HTML 表单。我的第一个障碍是杂志出版商网站是由 CMS 驱动的,所以我真的不能只用输入包围一个按钮并将其伪装成 POST 重定向。

到目前为止,我最干净的解决方案是创建一个新的、非公开的、小的 PHP,原始杂志网站将链接到该 PHP。此 PHP 将呈现一个小的 HTML 表单,该表单将立即将 instelf 发布到杂志托管站点,因此当杂志读者作为杂志托管站点到达时,他已经通过了身份验证

【问题讨论】:

  • POST 是否需要来自客户端计算机,或者直接来自您的服务器是否可以接受?
  • 必须是 PHP 吗?用 JS 做起来应该相当简单。

标签: php cross-domain one-to-many


【解决方案1】:

这可能需要在服务器端使用 cURL(或带有 $context 参数的 file_get_contents)或在客户端使用 $.post 来完成。我认为您不会仅仅因为服务器标头告诉它就说服大多数浏览器提交POST 请求-这对安全性来说很糟糕。 (例如:如果您在价值 10,000 美元的电视页面上,亚马逊可以简单地告诉您的浏览器单击“立即购买”按钮。)

PHP 示例

<?php
$opts = array(
  'http'=>array(
    'method'=>"POST"
    )
  );

$context = stream_context_create($opts);

$response = file_get_contents("<your url>", 0, $context);

JS 示例

params = { 'test1': 'value' };

$.post('<your url>', params, function(response)
{
    // handle response
});

【讨论】:

    【解决方案2】:

    您可以通过页面上的标头重定向来执行此操作,但它与表单提交不同,因此其发布到的页面需要能够接受 GET 样式的表单提交,但您应该能够使用如下代码执行此操作:

    <?php
    $val1 = mysql_escape_string($_POST["val1"]);
    $val2 = mysql_escape_string($_POST["val2"]);
    
    //Authenticate Locally here and then...
    
    $val1 = urlencode($val1);
    $val2 = urlencode($val2);
    header("Location: http://www.emagazine.com/forminput.php?val1=$val1&val2=$val2");
    

    请记住,如果您向浏览器打印任何内容,php 标头重定向将失败,这需要首先访问浏览器。

    【讨论】:

    • 对于它的价值,mysql_escape_string 不是您想要的,除非您插入到数据库中。使用urlencode 这两个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2011-07-31
    • 2011-07-14
    • 2011-04-24
    • 2011-10-11
    相关资源
    最近更新 更多