Laravel Параметр пропущенного тела клиента HTTP - PullRequest
0 голосов
/ 30 апреля 2020

Я пытался переключить свой внутренний клиент Guzzle на новый HTTP-клиент Laravel. Но, к сожалению, я не получаю такой же ответ. Я также пытался отправить параметр с HTTP-запросом asForm, но затем получил серьезную ошибку.

Есть идеи? С наилучшими пожеланиями, Стэн

Запрос жрет

            $body = 'grant_type=authorization_code&code=' . $request->code . '&redirect_uri=' . urlencode($redirect_url);


            $client = new Client();

            $response = $client->post($endpoint, [
                'headers' => [
                    'Content-Type' => 'application/x-www-form-urlencoded'
                ],
                'auth' => [
                    $client_id,
                    $client_secret,
                ],
                'body' => $body,
            ]);

Запрос Http

       $response = Http::withHeaders([
            'Content-Type' => 'application/x-www-form-urlencoded'
        ])->
        withBasicAuth($client_id, $client_secret)
        ->post($token_endpoint,
                [
                    'grant_type' => 'authorization_code',
                    'code' => $request->code,
                    'redirect_uri' => urlencode($redirect_url)
                ]);

** Ошибка

enter image description here

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Удаление пользовательского типа заголовка и использование asForm () решает проблему.

$response = Http::withBasicAuth($client, $client_secret)
            ->asForm()->post($endpoint,
                [
                    'grant_type' => 'authorization_code',
                    'code' => $request->code,
                    'redirect_uri' => $redirect_url
                ]);

https://laravel.com/docs/7.x/http-client#request -данные

0 голосов
/ 30 апреля 2020
HTTP-клиент

Laravel не учитывает заголовок вашего контента.

Вот мой запрос:

Http::withHeaders([
    'Content-Type' => 'application/x-www-form-urlencoded',
])
    ->withBasicAuth('user', 'pass')
    ->withoutVerifying()
    ->post('test-app.test', [
        'grant_type' => 'authorization_code',
        'code' => 'asdf',
        'redirect_uri' => 'asdf',
    ]);

Вот что получило мое приложение для тела:

"{"grant_type":"authorization_code","code":"asdf","redirect_uri":"asdf"}"

Вы, вероятно, путаете сервер OAuth, сообщая ему, что вы отправили application/x-www-form-urlencoded, когда вы действительно отправили application/json.

Попробуйте обновить код, чтобы использовать правильный тип содержимого:


Http::withHeaders([
    'Content-Type' => 'application/json',
])
//
...