2016-12-19 9 views
0

は、私がここにカールコードを持っていません:PHP |カールは、常にデータ

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL,'http://steamcommunity.com/profiles/' . $user->steam_id . '/inventory/json/730/2/'); 
$d=curl_exec($ch); 
curl_close($ch); 

は時々、URLは私だけnull応答を与えます。可能なことはありますか?あれがあれば、もう一度要求をしますか?

よろしく

+0

)DOMオブジェクトに要素をロードしてみて、特定のデータ$ DOM =新しいDOMDocumentオブジェクト(のDOMを解析します。 $ dom-> loadHTML($ d); – Karthickeyan

+0

コードを関数に入れます。ループ内の関数を呼び出します。 nullを返す場合は、1秒または2秒間スリープして、関数を再度呼び出します。 –

+0

execを実行した後にCurlが返すレスポンスコードを確認しましたか?サーバエラーまたはネットワークエラーが原因で断続的な障害が発生する可能性があります。 HTTPエラーの場合はcurl_getinfo(CURLINFO_HTTP_CODE)、ネットワークエラーの場合はcurl_errno()とcurl_error()を使用することができます – GordonM

答えて

0

あなたはretryパッケージを使用することができます。それはちょうど一つの関数です:

function retry($retries, callable $fn) 
{ 
    beginning: 

    try { 
     return $fn(); 
    } catch (\Exception $e) { 
     if (!$retries) { 
      throw $e; 
     } 

     $retries--; 

     goto beginning; 
    } 
} 

あなたはこのようにそれを使用することができます:

// retry an operation up to 3 times 
$response = retry(3, function() use ($user) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_URL,'http://steamcommunity.com/profiles/' . $user->steam_id . '/inventory/json/730/2/'); 
    if (!$response = curl_exec($ch)) { 
     throw new RuntimeException(curl_error($ch)); 
    } 
    curl_close($ch); 

    return $response; 
});