Php 如果超时,curl_exec()是否重试?

Php 如果超时,curl_exec()是否重试?,php,curl,Php,Curl,在我的应用程序中,我必须对Web服务进行POST调用。他们向我发送了一个XML响应,基本上说是“接受”或“拒绝”。 上周,我在其中一个电话中遇到了问题:当他们的后端告诉我此请求已被接受时,我收到了一个“拒绝”响应。 我问他们发生了什么,他们告诉我他们收到了两个请求(使用相同的ID-我发送给他们的参数)。第一个被“拒绝”,第二个被“接受”。 我进行了调查:在我的代码中,如果我收到一个“拒绝”响应,我会记录它,更新我的数据库,就这样我不再尝试。 唯一的东西就是PHPcurl函数。 问题发生的那天,W

在我的应用程序中,我必须对Web服务进行POST调用。他们向我发送了一个XML响应,基本上说是“接受”或“拒绝”。
上周,我在其中一个电话中遇到了问题:当他们的后端告诉我此请求已被接受时,我收到了一个“拒绝”响应。
我问他们发生了什么,他们告诉我他们收到了两个请求(使用相同的ID-我发送给他们的参数)。第一个被“拒绝”,第二个被“接受”。

我进行了调查:在我的代码中,如果我收到一个“拒绝”响应,我会记录它,更新我的数据库,就这样我不再尝试。

唯一的东西就是PHP
curl
函数。
问题发生的那天,Web服务花费了异常长的时间(20秒)作出响应。
可以
curl
进行多次调用吗?
PHP函数中没有
重试
选项(或者我没有找到),但我宁愿在这里询问以确定

这是我的curl代码

$ch = curl_init();

$myArrayWithDatas = array( '...' );
$httpQueryFields = http_build_query($myArrayWithDatas);

$url = "https://www.webservice.com/api";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $httpQueryFields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

if (empty($response)) {
    // I log an error
    // (no trace of that in my logs)
} else {
    // I log the XML response
    // (one "Refused" response logged)
}

curl_close($ch);

是否有任何情况下,此代码可以向
$url
发送2个或更多请求?

curl\u exec
只执行1次调用


您是通过cron作业还是计划任务运行代码?如果是这样的话,可能您的代码已经启动了两次,这就解释了为什么要执行两次调用。

这不是cron作业,我没有循环,我将继续搜索另一个错误,但我希望确保它不会来自curl。我还在等待Web服务告诉我更多信息。谢谢您的确认!:)如果我是您,我会在每次调用webservice时创建一个唯一的日志条目(不要使用您发送的ID来标识该日志条目,使用某种UUID),我还会转储一些变量,例如当前时间戳、
$\u SERVER
(如果您是从命令行执行它,这将包含传递的参数)。这应该有助于调试。每次调用此Web服务时,我都会记录所有发送的参数、会话和cookie以及时间戳。在我的日志中,这个ID只有一个调用。这就是为什么我想知道问题是否出在curl上:我只记录了一次,但是curl调用了几次。我正在等待Web服务向我发送他们的日志,看看它是否能给我提供线索。也许,问题是在他们这边。我刚刚从他们那里得到了答案,事实上,这是他们那边的问题。但最好确保卷曲不会引起这种问题。:)