2016-08-16 4 views
-3

ループ内のcurlを使用して、配列にリクエストを送信して応答を格納する方法は100回ですか?100回ループでcurl PHPを使用するには?

たとえば、curlが最初にループで使用し、500レコードを取得して配列に格納し、2番目のループで同じプロセスを実行し、500レコードを応答して問題なく同じ配列に格納します。最後に、配列に50K個のレコードを格納する必要があり、データベースにレコードを挿入するために使用します。

私は最後の2日間働いていますが、これについては何の解決策も得られませんので、私を助けてください。

<?php 
$final_data = array(); 
for($d=1;$d<=100;$d++) 
{ 
    $data = '{"request": {"header": {"username": "xxx","password": "xxx"}, 
    "body": { 
    "shapes": [], 
    "size_to": "", 
    "size_from": "", 
    "color_from": "", 
    "color_to": "", 
    "clarity_from": "", 
    "clarity_to": "", 
    "cut_from": "", 
    "cut_to": "", 
    "polish_from": "", 
    "polish_to": "", 
    "symmetry_from": "", 
    "symmetry_to": "", 
    "labs": [], 
    "price_total_from": "", 
    "price_total_to": "", 
    "page_number": "1", 
    "page_size": "50", 
    "sort_by": "price", 
    "sort_direction": "ASC" 
    }}}'; 

    $json = json_decode($data,true); 
    $json['request']['body']['page_number'] = $d; 
    $data = json_encode($json); 

    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_POST, 1); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 

    curl_setopt($curl, CURLOPT_URL, 'http://technet.rapaport.com/HTTP/JSON/RetailFeed/GetDiamonds.aspx'); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    $result = curl_exec($curl); 
    $dd = json_decode($result,true); 

    foreach($dd['response']['body']['diamonds'] as $key) 
    {  
     array_push($final_data,$key); 
    } 
    curl_close($curl); 
} 
?> 
+0

ブラウザのクラッシュはどのようにサーバー側のコードと関係がありますか?あなたはまた、あなたがやっていることを理解するために、より多くの詳細、コードなどを与える必要があります。 –

+0

これにはどのくらいの時間がかかりますか?サーバーサイドのプロセスが完了するまでブラウザは数分待たされません。クライアントは、おそらく "Oops、time out"などのように見えます。 – Bobby

+0

私の無効な質問を申し訳ありません。既に私の質問を更新しました。 –

答えて

1

あなたはcurl_multiを使用することができます実行するには、いくつかの要求を持ったときに、それはより効率的です。

$mh = curl_multi_init(); 
$handles = array(); 

for($i = 0 ; $i < 100 ; $i++){ 
    $ch = curl_init(); 
    $handles[] = $ch; 

    curl_setopt($ch, CURLOPT_URL, 'http://technet.rapaport.com/HTTP/JSON/RetailFeed/GetDiamonds.aspx'); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    curl_multi_add_handle($mh,$ch); 
} 

$running = null; 
do { 
    curl_multi_exec($mh, $running); 
} while ($running); 

foreach($handles as $ch){ 
    $result = curl_multi_getcontent($ch); 

    $dd = json_decode($result,true); 

    foreach($dd['response']['body']['diamonds'] as $key){  
     array_push($final_data,$key); 
    } 

    curl_multi_remove_handle($mh, $ch); 
    curl_close($ch); 
} 
+0

マインドブローイング溶液@vincenth。どうもありがとうございました。 評判スコアがないので、私はあなたに評価を与えることができません。 –

+0

それはあなたを助けた限り重要ではありません。 – vincenth

+0

ありがとう@vincenth –

関連する問題