在PHP

时间:2017-02-23 20:11:20

标签: php curl timeout

我在Raspberry Pi中运行一个apache服务器,它使用CURL从PHP脚本连接到ESP8266 WiFi模块。它可以通过模块的自动回答工作得很好(即一旦他们收到http查询,他们回答),但是当它在响应之前依赖于人类动作时几乎立即超时(即必须按下按钮才能回答http查询)。

我有以下配置,我想要的是给脚本5秒建立一个连接,然后在超时之前给模块另外12秒回答:

$curl = curl_init("http://10.0.0.100:51813/?getVars=values");
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_USERAGENT => "Custom UserAgent",
    CURLOPT_FAILONERROR => 1,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 12,
    CURLOPT_HTTPHEADER => array('Accept: application/json'),
    CURLOPT_INTERFACE => "uap0"
));
$resp = curl_exec($curl);

如果没有建立连接(CURLOPT_CONNECTTIMEOUT),我希望脚本在5秒后超时,如果已连接,那么如果没有收到回答,我希望它在12秒后超时({ {1}} _ TIMEOUT)。

在我的测试中,它在连接3秒后(平均值)超时,并且在连接后立即超时(因此它不会等待12秒)。

你知道为什么吗?

注意:问题不能来自wifi模块。 WiFi模块获取请求,然后等待用户交互(持续10秒)。如果用户按下按钮,它将发送请求。如果没有,它会关闭连接。如果我从模块的代码中删除等待用户进行交互的部分,它会发送答案,一切正常(除了用户没有交互)

0 个答案:

没有答案