PHP curl发布数据未清除

时间:2013-12-30 02:21:12

标签: php post curl

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

以下是我创建请求的示例:

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);
}

如您所见,这是相当简单的。

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

第一次请求

  

Restful Function:ValidateUserByEmail Params:email=sam.bengtson@gmail.com& pass = foo

第二次请求

  

Restful Function:GetRegionByUserId Params:userid = 11.bengtson@gmail.com& pass = foo

第二个请求的userid param应该只是1.我可以看到在执行curl_exec函数之前正确设置了它。

2 个答案:

答案 0 :(得分: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秒,但我建议缩短甚至加长它以查看速度,性能和速度的最佳平衡。您的设置准确性。

答案 1 :(得分:1)

如果是我,我会仔细检查调用Communicate()的代码。在我看来,如果存在错误,那么在将arg传递给函数之前,它与$postdata参数的处理有关。使用var_dump($postdata)进行编码的垃圾,我打赌你会发现其中一个很明显的错误,无法找到。

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