cURL挂起请求,等待超时进行


cURL hangs on request, waits for timeout to proceed

我遇到了一个问题,我找不到解决方案。更糟糕的是,其他人似乎都没有这个问题,所以我可能正在做一些非常愚蠢的事情。

一些背景信息:我试图做一个代理页面,转发一个AJAX请求到不同的服务器。这是为了规避相同域策略。我希望这段代码所做的就是获取POST变量,将它们转发到另一个页面,然后返回结果。它一直在工作,但有一件事:每次它等待超时继续。我现在把它设置为1秒,所以它现在做得很好,但我更希望有一个快速的响应和适当的超时。

下面是我的代码:

// create a new cURL resource
$call = curl_init();
// set URL and other appropriate options
curl_setopt($call, CURLOPT_URL, $url);
curl_setopt($call, CURLOPT_POST, true);
curl_setopt($call, CURLOPT_POSTFIELDS, $params);
curl_setopt($call, CURLOPT_HEADER, false);
curl_setopt($call, CURLOPT_RETURNTRANSFER, true);
curl_setopt($call, CURLOPT_CONNECTTIMEOUT, 1);
// grab URL and pass it to the browser
$response = curl_exec($call);
// close cURL resource, and free up system resources
curl_close($call);
echo $response;

我试过用它发送一个"Connection: close"头,以及几种方法来使目标代码指定它已经完成运行(设置Content-length, flushing, die()等)。在这一点上,我真的不知道是怎么回事,最让我惊讶的是我找不到任何有类似问题的人。

谁能帮我?

如果服务器没有实际完成请求,这是有意义的。这在页面流或服务流场景中是预期的。您确定服务器实际上对每个请求返回了完整的HTTP响应吗?

听起来像是在尝试连接,超时,重试正在工作。

这个为我修复了它:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

可以通过ipv6连接命令行,所以我不知道为什么这有帮助。