【问题标题】:Make cURL behave like exactly like form使 cURL 的行为与表单完全相同
【发布时间】:2009-12-06 16:18:35
【问题描述】:

我的站点上有一个表单,可以将数据发送到某个远程站点 - 简单的 html 表单。 我想做的是使用用户输入表格的数据用于统计目的。 因此,我没有将数据发送到远程页面,而是先将其发送到我的脚本,该脚本将其重新发送到远程站点。

问题是我需要它以与通常形式完全相同的方式运行,将用户带到远程站点并显示资源。

当我使用这段代码时,它有点工作,但不是我想要的方式:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $action);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
curl_close($ch);

问题是它在同一个脚本中显示响应。例如,如果 $action 是例如: somesite.com/processform.php,我的脚本名称是 mysqcript.php,它会在“mysqcript.php”中显示“somesite.com/processform.php”的响应,因此所有相关链接都不起作用。 如何将用户发送到“somesite.com/processform.php”?和按下按钮一样吗?

莱昂蒂

【问题讨论】:

    标签: php curl


    【解决方案1】:

    我认为您将不得不这样做,因为翻译相对路径是客户的工作。应该很简单:只需获取您提出的请求的基本目录

    http://otherdomain.com/my/request/path.php
    

    并将其添加到不以“/”或协议(“http://”、“ftp://”)开头的每个传出链接之前。

    检测所有传出链接很困难,但我 100% 确定有现成的 PHP 类可以做到这一点。检查例如 this article 和用户 cmets 中的 getLinks() 函数。我不能 100% 确定这是否是您需要的,但它肯定朝着正确的方向发展。

    【讨论】:

      【解决方案2】:

      这里有几个可能的解决方案,我将它们单独发布,以免与我推荐的解决方案混淆:

      1 - 继续使用 cURL,解析响应并向其添加 <base/> tag。它应该适用于该页面上的几乎所有内容。

      <base href="http://realsite.com/form_url.php" />
      

      2 - 不要更改提交 URL。将表单提交到真实的 URL,但使用一些 Javascript 库(YUI 会这样做)捕获其内容并通过 XHR 将其发送到您的脚本。但它仍然有点 hacky。

      【讨论】:

        【解决方案3】:

        有几种方法可以做到这一点。这是最简单的方法之一:只需使用 307 重定向。

         header('Location: http://realsite.com/form_url.php', true, 307');
        

        您可以在 header() 之前或之后进行日志记录和其他操作,但如果您在调用 header() 之后执行此操作,则需要使用以下命令开始脚本

        ignore_user_abort(true);
        

        请注意,浏览器应该通知用户他们的表单正在被重定向。

        【讨论】:

          猜你喜欢
          • 2011-09-22
          • 2015-04-29
          • 2016-01-24
          • 1970-01-01
          • 2012-05-03
          • 1970-01-01
          • 1970-01-01
          • 2016-02-15
          • 1970-01-01
          相关资源
          最近更新 更多