Жрет пост вложенного массива Issue - PullRequest
0 голосов
/ 19 сентября 2018

Я разрабатываю веб-сайт с использованием Laravel 5.5 и Guzzle 6.3.

Я столкнулся с проблемой при попытке использовать вложенные массивы при попытке создать папку в BOX с помощью API.

    $url = $this->api_url . "/folders";
    $headers = [
        'Authorization' => 'Bearer ' . $this->access_token,        
    ];
    $client = new Client();
    $response = $client->post($url, [
        'headers' => $headers, 
        'form_params' => [
            'name' => $name,
            'parent' => [
                'id' => $parent_id
            ]
        ]
    ]);

Он показывает мне такие ошибки:

Тело сущности должно быть правильно вложенной парой имя / значение атрибута ресурса

Я также уже пытался использовать shell_exec curl, чтобы он запускалсяcurl из командной строки, и он выдает мне ту же ошибку, как это

picture

Но когда я попытался запустить Cygwin, curl работает нормально.

Я также могу выполнить загрузку с использованием многочастного запроса. Вложенный массив работает нормально.

Я не знаю, почему я получаю эту проблему с вложенным массивом, когда вложенный массив работает нормально с многокомпонентным запросом.

Ссылка на коробочную документацию POST здесь .

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Для вас сделать любой http запрос данных, содержащих вложенные поля;вы должны включить Content-Type в заголовки;затем установите его на application/x-www-form-urlencoded примерно так:

$url = $this->api_url . "/folders";
$headers = [
    'Accept'       => 'application/json',
    'Content-Type' => 'application/x-www-form-urlencoded',
    'Authorization' => 'Bearer ' . $this->access_token,
];
$client = new Client();
$response = $client->post($url, [
    'headers' => $headers,
    'form_params' => [
        'name' => $name,
        'parent' => [
            'id' => $parent_id
        ]
    ]
]);
0 голосов
/ 19 сентября 2018

Согласно документам вы не можете использовать опцию multipart:

form_params не может использоваться с опцией multipart.Вам нужно будет использовать один или другой.Используйте form_params для запросов application / x-www-form-urlencoded и multipart для запросов multipart / form-data.

Этот параметр нельзя использовать с body, multipart или json

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

$url = $this->api_url . "/folders";

$client = new Client([
    'headers' => [
        'Authorization' => 'Bearer ' . $this->access_token,
        'Accept'        => 'application/json',        
    ]
]);

$response = $client->post($url, [ 
    'json' => [
        'name' => $name,
        'parent' => [
            'id' => $parent_id
        ]
    ]
]);

фактически после повторного чтения ссылки на поле, после отправки запроса без загрузки файлов он принимает application / json, который form_params используется для application / x-WWW-форм-urlencoded

...