0

我已经使用 PHP 多年,并设置了许多 HTML 表单,然后由另一个 php 页面处理这些表单,以将记录插入到数据库中,并将 POST 参数设置为各个字段。

我现在正在使用一个新的 web 服务,它将数据发布到我们的一个 PHP 页面,我们无法解析出 POST 参数。我设置了一个测试 html 表单来模仿 POST 并且成功运行。

我一直在浏览 IIS 日志(服务器是运行 IIS 7.5 和 PHP 5.3.8 的 Windows Server 2008 R2 标准版)并安装了 Microsoft Network Monitor 以捕获有关 POST 数据的详细信息。这是显示 Web 服务和我的 HTML 表单的有效负载详细信息的摘录:

Webservice: - IIS 日志中的客户端显示为:Apache-HttpClient/4.0.1+(java+1.5)

  • 有效负载:HttpContentType = NetmonNull HTTPPayloadLine:inReplyToId=MG1133&to=61477751386&body=Test&from=61477751386&messageId=166652576&rateCode=

我的 HTML 表单:

  • 有效载荷:HttpContentType = application/x-www-form-urlencoded inReplyToId:MG1133 至:61477751386 正文:测试来自:61477751386 messageId:166594397

在 PHP 页面中,我们使用了一系列:

if(isset($_POST['inReplyToId']) && $_POST['inReplyToId'] !== '' ) {
    $request->setField('ReplyToID', $_POST['inReplyToId']);
    }

获取 POST 值并将它们设置为字段,作为在数据库中创建新记录的一部分。当 Web 服务执行 POST 时,不会将任何 POST 值设置到字段中 - 记录已创建但字段值为空。

当我们完成 html 表单时,一切都按预期完成。

我不确定下一步该去哪里进行故障排除 - 我可以看到不同的 HttpContentType 和不同的有效负载结构,但不确定这是否是问题以及我需要采取什么措施。

4

1 回答 1

0

使用 file_get_contents('php://input') 终于让我看到了 POST 数据。然后我可以使用 parse_str() 从字符串生成变量:

$postText = file_get_contents('php://input');
parse_str($postText);

if(isset($inReplyToId) && $inReplyToId !== '' ) {
$request->setField('_kf_GatewayMessageID', $inReplyToId);
}

等等。

于 2013-07-01T13:45:54.390 回答