2016-07-08 10 views
1

どのようにして非同期リクエストを、異なるポストデータを持つ複数のURIにそれぞれ作成できますか?複数のポストxmlデータをグーグルと複数の非同期リクエスト

各URIのデータを取得できましたが、非同期にする必要があります。

また、要求が長時間かかる場合、どのようにタイムアウトしますか?

マイコード:application/x-www-form-urlencodedについては

//url 
$ur1 = 'www.exaample1.com'; 
$ur2 = 'www.Test.com'; 
//xml 
$ur1_xml = ''; // xml code 
$ur2_xml = ''; // xml code 
//headers 
$ur1_header = array("POST HTTP/1.1", 
     "Content-type: application/xml; charset=\"utf-8\"", 
     "Content-length: " . strlen($ur1_xml)); 
$ur2_header = array("POST HTTP/1.1", 
     "Content-type: application/xml; charset=\"utf-8\"", 
     "Content-length: " . strlen($ur2_xml)); 

     $client = new Client(); 

    // make request 

    $request = new Request('POST', $ur1_url, $ur1_headers,$ur1_xml); 
    $promise = $client->sendAsync($request)->then(function ($response) { 
     echo '<pre>'; 
     print_r(simplexml_load_string($response->getBody())); 
     echo '</pre>'; 
    }); 

die(); 

答えて

0

は非同期あなたはがつがつ食うの約束から利益を得ることができます要求送信します。ヘッダーとPOSTフィールドは、配列にdocuments stateと表示されます。

use GuzzleHttp\Client; 
use GuzzleHttp\Promise; 
. 
. 
. 
$client = new Client(); 
$promises = [ 
    $client->postAsync($url1, ['headers' => $headers1, 'form_params' => $postData1]), 
    $client->postAsync($url2, ['headers' => $headers2, 'form_params' => $postData2]), 
    $client->postAsync($url3, ['headers' => $headers3, 'form_params' => $postData3]) 
]; 

$results = Promise\unwrap($promises); 
$results = Promise\settle($promises)->wait(); 

// response headers of first request 
print_r($results[0]['value']->getHeaders()); 

// retrieved contents of second request 
echo $results[1]['value']->getBody()->getContents(); 
+0

私は前に上記のコードで試してみましたが、私は、 'エラーが出ます:「form_params」 –

+0

上)(メンバ関数getHeadersに電話していません[Guzzleの文書](http://docs.guzzlephp.org/en/latest/quickstart.html#sending-form-fields)に従ってPOSTフィールドを要求に添付する正しい方法です。しかし、私はあなたが 'getHeaders()'で得たエラーのために私の答えを更新しました。 @PeterHahn –

+0

' form_params'はその「体」も、非オブジェクト ' – revo

関連する問題