【问题标题】:curl_exec: how to cancel a long running HTTP request?curl_exec:如何取消长时间运行的 HTTP 请求?
【发布时间】:2011-10-13 21:33:27
【问题描述】:

我正在使用 PHP 的 curl_exec() 向一个运行时间很长的 API 发出请求。但我其实不需要知道结果,我只需要启动过程。

这个过程是成功还是失败对我来说并不重要。所以我想在我提出请求后立即断开连接。

如何断开 curl_exec 连接?我不想等待 30 - 60 秒的响应:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://example.com/LongRunningProcess/parameter");        
curl_exec($ch); 
// need to do something here to just drop the connection, don't wait for curl_exec
// but what is that something?
curl_close($ch);

我相信解决方案可能会涉及 curl_multi?

【问题讨论】:

    标签: php curl httpconnection curl-multi


    【解决方案1】:

    您可以使用CURLOPT_TIMEOUT。来自manual

    允许 cURL 函数执行的最大秒数。

    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    

    【讨论】:

    • 这会在 10 秒后抛出错误吗?我将如何捕捉并忽略该错误?
    • curl_exec 之后,检查curl_errno 中的CURLE_OPERATION_TIMEDOUT (28)。
    【解决方案2】:

    根据远程服务器的配置方式,该过程可能会在您断开连接后立即结束。除非你 fork,或者远程服务器配置为允许它,否则你将不得不等待它结束。

    如果您可以控制该远程服务器,则可以配置 PHP 以使其继续运行。您正在寻找 ignore_user_abort in PHP.inias a function

    【讨论】:

    • 另一台服务器是 ASP.NET。如果您断开连接,它似乎工作正常(例如手动输入 URL,按回车键,然后关闭浏览器 - 它仍然运行直到完成)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2017-10-05
    • 1970-01-01
    • 2014-02-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多