Guzzle 6 带有 auth return null 的异步请求

Guzzle 6 Asyncronous request with auth return null

我们需要从 API URL 获取实时数据。首先我们需要连接服务器,在本例中为 $uri1,然后我们必须使用第二个 URI(例如:$uri2),它将以 JSON 格式给出输出。

我尝试这样做的是:

$un = 'abc';  //username
$pa = '123';  //password
$base_uri = 'http://example.com:82/';
$uri1 = 'api/instant/connectopc';
$uri2 = 'api/instant/displaydata?site=SITE';

$cookieFile = 'jar.txt';
$cookieJar = new FileCookieJar($cookieFile, true);

$client = new Client([
        'base_uri' => $base_uri,
        'auth'=>[$un, $pa],
        'cookie'=>$cookieJar,
        'curl' => [

            CURLOPT_COOKIEJAR => 'jar.txt',

            CURLOPT_COOKIEFILE => 'jar.txt'
        ]

    ]);


$promises = [

        'connect' => $client->getAsync($uri1),
        'live'   => $client->getAsync($uri2)

    ];

    $results = Promise\unwrap($promises);

    dd($results);

    //$body = $results['live'];

OUTPUT

array:2 [▼
  "connect" => Response {#345 ▼
  -reasonPhrase: "OK"
  -statusCode: 200
  -headers: array:10 [▶]
  -headerLines: array:10 [▶]
  -protocol: "1.1"
  -stream: Stream {#336 ▶}
}
"live" => Response {#357 ▼
  -reasonPhrase: "OK"
  -statusCode: 200
  -headers: array:10 [▶]
  -headerLines: array:10 [▶]
  -protocol: "1.1"
  -stream: Stream {#348 ▶}
}]

Data: dd($body->getBody()->getContents());  //-----> output:  null

i) 首先我们需要连接uri 1。 ii) uri 2 将实时提供实时数据。

两个 URI 都在连接,但第二个 URI ($uri2) 的内容为 NULL。

我们将不胜感激。

此致, NKR

我找到了解决方案:

....
$connect = $client->get($uri1);    //<-----this will connect to server.

//Now for second URI, use JAR file to utilize the old cookie
//to ensure the URI is using previous authentication/session.

$live = $client->get($uri2, ['cookie'=>$cookieJar]);

dd($live);