【问题标题】:Server unable to capture the POST data sent from another server by URL redirect服务器无法通过 URL 重定向捕获从另一个服务器发送的 POST 数据
【发布时间】:2012-10-16 06:18:59
【问题描述】:

最近我开始为我的网站开发支付网关(进一步拼写为“PG”)流程。该过程包括将 Post 数据 以表单的形式发送到 PG 服务器,方法是重定向到他们的页面,并通过以下方式从 PG 接收有关交易的响应POST 数据通过将 URL 重定向到我们的服务器页面发送。

问题出现在这里,因为我的服务器无法检索从 PG 服务器发送的 POST 数据。

当我使用 PHP 编码时,我尝试使用 print_r($_POST); 打印来自 PG 的所有响应,甚至尝试使用 print_r($_REQUEST);。除了PHPSESSID 和其他一些数据数组,我没有找到任何数据打印。

至于确认,我检查了他们是否使用称为“TamperIE”的 IE 插件发送数据。它显示所有发送到其服务器的 POST 数据。但它根本不会出现在我们的服务器上。我在另一台服务器上尝试了这个过程:在那里我能够获得 POST 响应,但不能使用当前工作的服务器。

你能建议可能是什么问题吗?

【问题讨论】:

  • 错误日志中是否有任何错误? PG 是否正在访问您的页面,而您只是没有收到任何数据或根本没有访问您的服务器?
  • 您是否有任何 mod_rewrite 规则可以在 PG 服务器尝试访问该文件之前/期间应用于目标文件?
  • 能否查看请求/responses的头部细节,看看数据是否可用?
  • 亲爱的 Mahdi,这就是我的 .htaccess 文件内容。选项 +FollowSymLinks 选项 -RewriteRule 上的索引 RewriteEngine ^([a-zA-Z0-9_-]+)$ $1.php RewriteCond % {HTTPS} !=on RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] ExpiresActive On ExpiresDefault A259200000 标头集 Expires "Thu, 15 Apr 2013 20:00:00 GMT"
  • @user1749092 首先我会说用这些新信息更新您的问题,然后在您的重写规则顶部添加一个例外,例如^pg_handler.php$,以确保您的重写规则不会影响您的回发机制。如果你们中的一个重写规则只是从 PG 网关重定向请求的页面,那么您将丢失所有 POST 数据,这似乎与您现在正在努力的类似...您应该小心这一行:^([a-zA-Z0-9_-]+)$ $1.php ...我想你的问题在这里的某个地方......

标签: php post


【解决方案1】:

使用curl模拟来自其他服务器的请求,制作一个test.php,内容如下:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/path/to/form");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$data = array(
    'foo' => 'foo foo foo',
    'bar' => 'bar bar bar',
    'baz' => 'baz baz baz'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);

curl_close($ch);

并使用 cli 运行它以获取调试信息并查看问题所在。不要忘记把应该从服务器返回的变量和确切的 url 放好

【讨论】:

  • 亲爱的奥马尔,感谢您的建议。我什至尝试了您给出的上述代码。我仍然没有得到响应。
【解决方案2】:

为此使用 CURl,它安全可靠。

【讨论】:

  • 他不能:表单提交发生在客户端上,而不是服务器上。
【解决方案3】:

如果可能,请在 PG 请求中发送您的销售/采购订单的唯一代码(订单 ID),我相信您的 PG 会在 POST 数据中发回该唯一代码,并借助该唯一代码您可以跟踪该订单 ID 以更新订单状态。

通过使用这种方法,您无需担心会话。

【讨论】:

    【解决方案4】:

    我找到了出现此问题的原因。

    .htaccess 文件中,我为重定向写了一行:

    RewriteRule ^ http://mysite.com{REQUEST_URI} [R=301,L]
    

    如果我从文件中删除上述行,我可以从 PG 服务器接收 POST 字段,但我在继续之前 丢失了存储的会话数据 PG 包含预订信息。这些会话无法显示在响应页面中,因为服务器会从响应页面生成全新的会话。

    我为这个问题找到了另一种解决方案:

    我在所有需要会话的页面中使用以下代码:

    $lifetime=60*30;
    session_set_cookie_params ( $lifetime , '/', '.mysite.com');
    

    session_start();之前添加上述代码后。

    现在我可以从 PG 获取 POST 数据,还可以保留 SESSION 值

    但是,我认为这不是解决此问题的理想方法。如果有人可以为 URL 重定向建议任何 SERVER 配置并在 REDIRECTION 之后维护 SESSION 值,那就太好了。谢谢大家:-)

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 2016-03-31
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      相关资源
      最近更新 更多