cURL根据请求挂起,等待超时继续

时间:2011-11-05 21:46:33

标签: php curl

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

一些背景信息:我正在尝试创建一个类似于代理的页面,将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,flush,die()等)。在这一点上,我真的不知道发生了什么,最让我惊讶的是我找不到有类似问题的人。

谁能帮帮我?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

听起来像是尝试连接,超时并重试正常。

这对我来说是固定的:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

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

相关问题