我在Laravel 5.1中使用了Gazzle 6,并且我有一种奇怪的行为,从我正在使用的API返回我的数据。这是我的代码:
$data = array(
'id' => '112233'
);
$from = \Carbon\Carbon::now()->subDays(1)->format('d/m/Y');
$to = \Carbon\Carbon::now()->subMonths(1)->format('d/m/Y');
$first_report = $this->client->post('https://my.service.com/reporting/execute/', [
'auth' => ['myemail@email.com', 'mypassword'],
'form_params' => ['data' => json_encode($data)]
]);
$second_report = $this->client->get('mysecondservice.com/reports', [
'query' => [
'account_auth_token' => '000011122223333444455556667778889999',
'start_date' => $to,
'end_date' => $from
]
]);
return array(
'first_report' => $first_report,
'second_report' => $second_report
);
如果我将数据作为前一个数组返回,则 first_report 和 second_report 为空。但是,如果我只返回例如
return $first_report;
或
return $second_report;
每个报告都会正确返回数据,但我不知道那里有什么问题,因为我尝试过: json_encode 甚至返回$ response() - > json ...... 但仍无效。
你对发生了什么有什么想法吗?
答案 0 :(得分:2)
我认为您需要在必须获取响应的对象上运行send()
函数,然后在其上运行getBody()
以获取响应对象,然后对其运行getContents()
将响应的内容作为字符串获取。总的来说它看起来像
$first_report = $this->client->post('https://my.service.com/reporting/execute/', [
'auth' => ['myemail@email.com', 'mypassword'],
'form_params' => ['data' => json_encode($data)]
])->send()->getBody()->getContents();
$second_report = $this->client->get('mysecondservice.com/reports', [
'query' => [
'account_auth_token' => '000011122223333444455556667778889999',
'start_date' => $to,
'end_date' => $from
]
])->send()->getBody()->getContents();
我发现Guzzle文档与我用来获得结果的实际方法不符。不确定它是否已经过时或者我做错了,但这种方法适合我。