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);
我们需要从 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);