【问题标题】:PHP curl post data not clearingPHP curl发布数据未清除
【发布时间】:2013-12-30 02:21:12
【问题描述】:

我一直在使用 PHP 和 curl 将敏感数据发布到我的后端服务器。但是,在第 2 次或第 3 次 post 请求之后,post 数据似乎并没有被清除,而是似乎将旧的 post 数据连接到正在发送的新数据。

这是我如何创建请求的示例:

function Communicate($req, $postdata)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, sprintf('%s%s', $this->server_uri, $req));
    curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, substr_count($postdata, '='));
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);

    $res = curl_exec($curl);
    curl_close($curl);
    unset($postdata);
    $sfr = json_decode($res);
}

如您所见,它相当简单。

但是,我正在后端服务器上跟踪发布请求,这是我得到的:

第一个请求

Restful 函数:ValidateUserByEmail 参数:email=sam.bengtson@gmail.com&pass=foo

第二次请求

Restful 函数:GetRegionByUserId 参数:userid=11.bengtson@gmail.com&pass=foo

第二个请求的用户 ID 参数应该只有 1。我可以看到在 curl_exec 函数执行之前已正确设置。

【问题讨论】:

    标签: php post curl


    【解决方案1】:

    你的函数看起来很简单,但是假设接收端发生了一些事情,为什么不使用sleep 来延迟每个循环的连接,让你的接收点有时间赶上?

    例如,您的这部分代码是:

        $res = curl_exec($curl);
        curl_close($curl);
        unset($postdata);
        $sfr = json_decode($res);
    }
    

    sleep 将是:

        $res = curl_exec($curl);
        curl_close($curl);
        unset($postdata);
        $sfr = json_decode($res);
        sleep(3);
    }
    

    按照我现在设置的方式,它会休眠 3 秒,但我建议缩短甚至延长它,以查看适合您的设置的速度、性能和准确性的最佳平衡。

    【讨论】:

    • 我想你可能会在这里做点什么。我将对此进行一些测试并回复您。
    【解决方案2】:

    如果是我,我会非常仔细地检查调用Communicate() 的代码。在我看来,如果有一个错误,它与 $postdata 参数在将 arg 传递给函数之前的处理有关。用var_dump($postdata) 乱扔代码,我敢打赌,你会发现其中一个非常明显以至于无法找到的错误。

    (接收这些请求的服务器上的代码也是如此。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多