Я разрабатываю сайт с Ларавел 5.7 это имеет регистрационную форму. Когда форма отправлена, ее параметры используются для создания другого пользователя через API.
Эти API имеют .cloudfunctions.net
конечная точка и веб-приложение разработано с использованием Angular + Firebase.
Когда я делаю GuzzleHttp запрос к этой конечной точке, я получаю ответ HTML: страницу входа в учетную запись Google.
Странно то, что когда я запускаю соответствующую команду cURL с моей бродячей консоли или выполняю тот же запрос с Postman, он возвращает мне правильный ответ json.
Это пример команды cURL:
curl -d '{DATA}' -H "Content-Type: application/json" -u test:test -X POST https://{endpoint}.cloudfunctions.net/api/{function}
А это мой ApiManager
класс в проекте Laravel:
namespace App\Utils;
use GuzzleHttp\Client;
/**
* API Manager class.
*/
class ApiManager
{
protected $client;
protected $params;
protected $body;
public function __construct()
{
$this->setupClient();
}
/**
* Setup GuzzleHttp client.
* @return void
*/
private function setupClient()
{
$this->client = new Client([
'base_uri' => env('REMOTE_ENDPOINT'),
'auth' => [env('REMOTE_USERNAME'), env('REMOTE_PASSWORD')],
'headers' => [
'Accept' => 'application/json'
],
'strict' => true
]);
}
/**
* Setup request body as json.
* http://docs.guzzlephp.org/en/stable/request-options.html#json
*
* @param array $params
* @return void
*/
protected function setupBody($params)
{
$this->body = [
'debug' => env('GUZZLE_DEBUG', false),
'json' => $params
];
}
/**
* Decode raw json body to associative array
*
* @param mixed $response
* @return void
*/
protected function getResponseBody($response)
{
$body = json_decode($response->getBody(), true);
if ($body != null && array_key_exists('error', $body)) {
return $body['error'];
}
return $body;
}
/**
* Create user request.
*
* @param array $params
* @return mixed $response
*/
public function createUser($params)
{
$this->setupBody($params);
$response = $this->client->request('POST', '/create-user', $this->body);
if ($response->getStatusCode() == 200) {
return $this->getResponseBody($response);
}
return false;
}
/**
* Update user request.
*
* @param array $params
* @return mixed $response
*/
public function updateUser($params)
{
$this->setupBody($params);
$response = $this->client->request('POST', '/update-user', $this->body);
if ($response->getStatusCode() == 200) {
return $this->getResponseBody($response);
}
return false;
}
}
Кто-нибудь может помочь мне выяснить, почему Guzzle возвращает страницу входа в учетную запись Google, в то время как Postman или cURL из командной строки работают?
заранее спасибо
Задача ещё не решена.
Других решений пока нет …