Как получить аутентификацию токена или аутентификацию sk / ak через HTTP-запрос Laravel? Я вытащил сторонний пакет GuzzleHTTP для этого.

https://support-intl.huaweicloud.com/api-ecs/en-us_topic_0124306062.html

Это то, что я пробовал,

public function postToken() {
        $client = new \GuzzleHttp\Client();
        $response = $client->request('POST', url('https://  ecs.af-south-1.myhuaweicloud.com/v3/auth/tokens'), [
            {
                "auth": {
                  "identity": {
                    "methods": [
                      "password"
                    ],
                    "password": {
                      "user": {
                        "name": "username",
                        "password": "mypassword",
                        "domain": {
                          "name": "mydomain"
                        }
                      }
                    }
                  },
                  "scope": {
                    "project": {
                       "name": "projectname" 
                    }
                  }
                }
            }
          ]);
    }

Ошибка была

syntax error, unexpected '{', expecting ']'
0
chopz 16 Апр 2019 в 11:19

2 ответа

Лучший ответ

Синтаксис вашего запроса неверен.

Делай это так:

    $response = $client->request('POST', url('https://  ecs.af-south-1.myhuaweicloud.com/v3/auth/tokens'), [
        'json'=>[
            "auth"=> [
                "identity"=> [
                    "methods"=> [
                        "password"
                    ],
                    "password"=> [
                        "user"=> [
                            "name"=> "username",
                            "password"=> "mypassword",
                            "domain"=> [
                                "name"=> "mydomain"
                            ]
                        ]
                    ]
                ],
                "scope"=> [
                    "project"=> [
                        "name"=> "projectname"
                    ]
                ]
            ]
        ]
    ]);
1
Amirsadjad 16 Апр 2019 в 09:06

Ваш код содержит лишнюю } информацию.

public function postToken() {
        $client = new \GuzzleHttp\Client();
        $response = $client->request('POST', url('https://  ecs.af-south-1.myhuaweicloud.com/v3/auth/tokens'), [
            {
                "auth": {
                  "identity": {
                    "methods": [
                      "password"
                    ],
                    "password": {
                      "user": {
                        "name": "username",
                        "password": "mypassword",
                        "domain": {
                          "name": "mydomain"
                        }
                      }
                    }
                  },
                  "scope": {
                    "project": {
                       "name": "projectname" 
                    }
                  }
                }
            } // HERE IS THE PROBLEM
          ]);
    }

Удалите это, и вы можете быть готовы к работе.

Вот более удобная для чтения версия. Такую ошибку легче обнаружить, если следовать указаниям.

public function postToken() {
  $client = new \GuzzleHttp\Client();
  $response = $client->request(
    'POST', 
    url('https://  ecs.af-south-1.myhuaweicloud.com/v3/auth/tokens'),
    [
      {
        "auth": {
          "identity": {
            "methods": [
              "password"
            ],
            "password": {
              "user": {
                "name": "username",
                "password": "mypassword",
                "domain": {
                  "name": "mydomain"
                }
              }
            }
          },
        "scope": {
          "project": {
            "name": "projectname" 
          }
        }
      }
    ]
  );
}
1
Zendy 16 Апр 2019 в 08:58