Guzzle 发布嵌套数组问题

New*_*ser 5 curl xdebug laravel guzzle

我使用 Laravel 5.5 和 Guzzle 6.3 开发网站。

我在尝试使用 API 为 BOX 创建文件夹时尝试大量发布嵌套数组时遇到问题。

$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
        ]
    ]
]);
Run Code Online (Sandbox Code Playgroud)

它向我显示了这样的错误:

实体主体应该是正确嵌套的资源属性名称/值对

我也已经尝试过使用shell_execcurl 所以它从命令提示符运行 curl 它给了我同样的错误

图片

但是当我尝试从 cygwin 运行时,curl 工作正常。

我也可以使用多部分请求嵌套数组进行上传工作正常。

当嵌套数组在多部分请求中正常工作时,我不知道为什么会遇到此嵌套数组问题。

Box 文档 POST 的参考在这里

Dan*_*iel 2

根据文档,您不能使用 multipart 选项:

form_params 不能与 multipart 选项一起使用。您将需要使用其中之一。对 application/x-www-form-urlencoded 请求使用 form_params,对 multipart/form-data 请求使用 multipart。

此选项不能与 body、multipart 或 json 一起使用

因此,也许尝试在创建 Client 实例时设置标头:

$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
        ]
    ]
]);
Run Code Online (Sandbox Code Playgroud)

实际上,再次阅读框参考后,发布请求而不上传文件,它接受 application/json ,这是用于 application/x-www-form-urlencoded 的 form_params