2015-09-04 180 views
0

我正嘗試使用cURL for PHP從API中獲取數據。 當我執行下面的腳本時,cURL似乎沒有等待請​​求。cURL不會等待響應

它立即返回無法填充的空白字段。

function request($cityName) 
    { 
    $key = "abc"; 

    $api = "https://...?api-key=$key&format=json&city=$cityName"; 
    $api = urldecode(trim($api)); 

    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $api); 
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_USERAGENT, 'abc.com'); 

    $ret = curl_exec($curl); 
    $response = json_decode($ret); 

    var_dump($response); 
    curl_close($curl); 
    } 
+0

也許你應該檢查一個錯誤。 – Barmar

+0

@Barmar在那裏沒有任何關聯。 – Saphire

回答

0

試試這個,不要使用urldecode

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_ENCODING, ''); 
curl_setopt($curl, CURLOPT_USERAGENT, 'abc.com'); 

$server_output = curl_exec($ch); 
curl_close($ch); 
print_r($server_output); 
+0

仍然運行,甚至沒有聯繫的網址。 – Saphire

+0

檢查捲曲錯誤'curl_strerror' –

+0

有趣。 '對等證書無法通過給定的CA證書進行認證' – Saphire

0

有機會的捲曲取消,因爲低速connetction的請求。

如果CURLOPT_LOW_SPEED_TIME秒內的平均傳輸速率低於CURLOPT_LOW_SPEED_LIMIT字節/秒,則會發生這種情況。

嘗試以下操作:

curl_setopt($ch, CURLOPT_LOW_SPEED_LIMIT, 1); // cancel cURL if below 1 byte/second 
curl_setopt($ch, CURLOPT_LOW_SPEED_TIME, 30); // Wait for 30 seconds 

更改上述選項的值根據您的要求。

+1

在取消請求之前是否需要等待超時?他說它立即返回。 – Barmar

+0

沒有工作。仍立即爲var_dump返回NULL。 – Saphire

0

OAuth擴展使用curl來發出請求。默認情況下,CURL通常會驗證SSL證書以查看其接受的CA頒發的有效證書。爲此,curl使用一組捆綁的CA證書。

您可以禁用SSL檢查($ oauth-> disableSSLChecks())。或者確保你有一個當前版本的捲曲。 More information關於捲曲認證驗證。

+0

再一次檢查服務器時間。 –