【问题标题】:Posting a form data using POST with PHP使用 POST 和 PHP 发布表单数据
【发布时间】:2011-05-05 16:33:08
【问题描述】:

我已经研究了几个小时,但仍然不知所措。

我有一个带有链接的 PHP 页面 (PAGE1.PHP),当用户单击该链接时,PHP 页面需要从数据库中读取一些数据并使用 POST 将此数据发布到第三方站点。

我设法用 CURL 做到了这一点,但问题是,虽然数据已发布并且第三方页面确实加载正确,但 URL(在浏览器中)仍然显示为 PAGE1.PHP 而不是第三方-我发布到的派对 URL。

有什么办法可以做到这一点吗?

我可以选择在 PAGE1.PHP 上创建一个表单,其中我从数据库中读取的数据设置为隐藏,链接设置为提交。我还没有尝试过,但应该可以工作,但这意味着用户可以通过查看源代码来读取我从数据库中读取的数据。

关于如何做到这一点的任何想法?

【问题讨论】:

  • 找几个小时?你应该完全失明。已经有成千上万个类似的问题了。
  • 是的,我确实找了好几个小时......但我没有找到任何东西 - 特别是由于我的要求“URL(在浏览器中)仍然显示为 PAGE1.PHP 而不是第三个 -我发布到的派对 URL。”。我尝试过 CURL,我尝试过 PHP Redirect,尝试过 PEAR(但 godaddy 不允许这样做)等等……我什至不是开发人员!::)

标签: php redirect curl


【解决方案1】:

浏览器中的 URL 正确显示了您的原始 URL,因为这是浏览器请求的内容,也是为请求提供服务的内容;您的 PHP 页面在后台发出 POST 请求以获取数据,但随后将其返回给您的浏览器。

要获得我认为您想要的结果,您需要重定向浏览器以发布帖子。您关心隐藏数据的问题是正确的;听起来你可能需要做一些架构工作来解决这个问题。

【讨论】:

  • 嗯..关于我需要做什么样的建筑工作有什么想法吗?始终牢记我无法修改第三方网站。第三方网站会根据我发布的数据而变化。
  • @DavidV:很难确定您是否对第三方网站没有任何控制权;如果您可以使用隐藏数据从您的 PHP 发布帖子,然后为用户的浏览器提供指向该帖子确定的页面的“非敏感”链接,那么这可能会起作用。这实际上完全取决于您正在处理的第三方网站如何处理此类事情,以及他们是否要求用户拥有您正在处理的敏感数据,或者是否有某种方法可以绕过该要求。
  • 将使用隐藏形式 - 不是最好的安全性,但对于我使用它来说已经足够好了 .. 通过默默无闻的安全性是可以的。再次感谢。
【解决方案2】:

问题在于,当您使用 CURL 发布时,发布的是您的 Web 服务器,而不是用户的浏览器。因此,如果正在使用任何会话或 cookie,它们将不会继续存在。

我会按照您所说的做,创建一个隐藏表单并以这种方式发布数据。不过,您可能对此很聪明,并在 jQuery 中执行 document.ready ,一旦加载隐藏表单,您就可以将其发布给用户。虽然他们仍有一小段机会查看源代码,但它会更加精简。

<script>
$(document).ready(function() {
    $('#hiddenForm').submit();
});
</script>

编辑完整示例:

<?

  $urlToPostTo = 'http://www.thirdPartyDomain.com/login';
  $varsToPost['user'] = 'username';
  $varsToPost['pass'] = 'password';

  ?>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  <script>
    $(document).ready(function() {
        $('#hiddenForm').submit();
    });
  </script>
  <?

  echo '<form id="hiddenForm" action="'.$urlToPostTo.'" method="post">';

  /* create a hidden input for each var in 'varsToPost' */
  foreach($varsToPost as $varName=>$varValue) {
    echo '<input type="hidden" name="'.$varName.'" value="'.$varValue.'">';
  }

  echo '</form>';

?>

只需在$varsToPost 数组中添加/删除变量,它们就会自动插入。我想如果你传递密码/敏感数据,你总是可以在表单之前用 php 加密它并用 js 解密它提交。这仍然会使您保持打开状态,因为任何人都可以访问您的解密功能,但它会一目了然地掩盖您的数据。

即便如此,这个表单提交速度很快,很难说它是偷偷摸摸的。

【讨论】:

  • 哎呀..我不懂很多javascript,虽然我学得很快。你能至少让我知道我需要用伪做什么吗?我不想浪费你太多时间。
  • 嘿,谢谢...会调查的。你对乍得很有帮助:)
  • 效果很好 - 再次感谢乍得。真的很感激。
【解决方案3】:

【讨论】:

  • 嗯..你确定你能做到吗?根据我一直在阅读的内容,标题函数不支持 POST - 因为它们被发送到浏览器。
  • 经过一番谷歌搜索,是的,不幸的是,PHP 无法直接实现。但如果 javascript 没有问题,您可以制作“自动提交”表单。看看:webmaster-talk.com/php-forum/…
  • @Col。弹片至少我尝试过贡献,而不是仅仅制作糟糕的cmets
  • 当然。这就是这个蹩脚的网站的目的:贡献。教育、思考、常识和经验,都是没人关心的。继续,你会在这里得到大量的代表。
  • 教育?对不起,但我真的认为你没有资格谈论这个。您对我显然正在跟进的严肃回答发表了非建设性的评论。停在这里,不会喂巨魔,也不会开始毫无意义的燃烧。
猜你喜欢
  • 2016-05-06
  • 2021-01-17
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 2014-09-15
  • 2012-01-28
相关资源
最近更新 更多