如何修复仅在第一次调用脚本时发生的cURL SSL连接超时

时间:2013-07-12 16:58:11

标签: php curl

我在Windows服务器上使用cURL和PHP时遇到了一个奇怪的问题。我有一个非常基本的代码,我用来测试这个问题(几乎直接来自php cURL手册页):

<?php
// In this example we are referring to a page that handles html
$headers = array( "Content-Type: text/html");

// Initialise Curl
$curl = curl_init();

if ($curl === false)
    throw new Exception(' cURL init failed');

// Configure curl for website
curl_setopt($curl, CURLOPT_URL, "https://google.com");

// Set up to view correct page type
curl_setopt($curl, CURLOPT_HTTPHEADER, &$headers);

// Turn on SSL certificate verfication
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, TRUE);

// Tell the curl instance to talk to the server using HTTP GET
curl_setopt($curl, CURLOPT_HTTPGET, 1);

// 1 second for a connection timeout with curl
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);

// Try using this instead of the php set_time_limit function call
curl_setopt($curl, CURLOPT_TIMEOUT, 60);

// Causes curl to return the result on success which should help us avoid using the writeback option
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

if( ! $result = curl_exec($curl)) 
    $result = curl_error($curl); 

curl_close($curl);  

echo var_dump($result);
?>

对于代码转储感到抱歉,但这是非常基本的代码,它所做的只是尝试使用HTTPS(SSL)获取google.com网站。

问题是第一次调用此脚本时,响应始终:string(22)“SSL连接超时”。

对脚本的后续调用会输出所需的结果,但是,如果我在再次调用脚本之前等待几分钟,则会再次发生超时问题。

所以,重现“错误”的步骤:

  1. 调用脚本 - &gt;超时
  2. 再次调用脚本 - &gt;工作正常
  3. 再次调用脚本 - &gt;工作正常
  4. 多次调用脚本 - &gt;工作正常
  5. 等待10分钟
  6. 调用脚本 - &gt;超时
  7. 再次调用脚本n次 - &gt;工作正常
  8. 如果我调用任何其他脚本,即使在一段时间不活动之后立即响应,所以只有在涉及到cURL时才会发生此行为。

    所有组件都运行最新的稳定版本,包括PHP,cURL,OpenSSL等。服务器运行带有IIS 8的Windows 2012,最新升级,在FastCGI上运行PHP。

    有没有人知道如何解决这个问题?目前我有一个每5分钟运行一次的cron作业并调用上面的脚本来刷新cURL,但这感觉就像一个黑客:(

    感谢。

0 个答案:

没有答案