Php Guzzle 6发送多部分数据

Php Guzzle 6发送多部分数据,php,bdd,behat,guzzle,Php,Bdd,Behat,Guzzle,我想向Guzzle Http请求添加一些数据。有文件名、文件内容和带有授权密钥的头 $this->request = $this->client->request('POST', 'url', [ 'multipart' => [ 'name' => 'image_file', 'contents' => fopen('http://localhost:8000/vendor/l5-swagger/images/logo

我想向Guzzle Http请求添加一些数据。有文件名、文件内容和带有授权密钥的头

$this->request = $this->client->request('POST', 'url', [
    'multipart' => [
        'name' => 'image_file',
        'contents' => fopen('http://localhost:8000/vendor/l5-swagger/images/logo_small.png', 'r'),
        'headers' =>
            ['Authorization' => 'Bearer uCMvsgyuYm0idmedWFVUx8DXsN8QzYQj82XDkUTw']
            ]]);
但我有一个错误

可捕获的致命错误:传递给GuzzleHttp\Psr7\MultipartStream::addElement()的参数2必须是数组、字符串类型 给定,在第70行的vendor\guzzlehttp\psr7\src\MultipartStream.php中调用,并在第79行的vendor\guzzlehttp\psr7\src\MultipartStream.php中定义

在Guzzle 6中,文档是这样的:

谁知道我哪里出错了?

根据文档,“multipart的值是一个关联数组的数组”,因此您需要嵌套更深一层:

$this->request = $this->client->request('POST', 'url', [
    'multipart' => [
        [
            'name' => 'image_file',
            'contents' => fopen('http://localhost:8000/vendor/l5-swagger/images/logo_small.png', 'r'),
            'headers' => ['Authorization' => 'Bearer uCMvsgyuYm0idmedWFVUx8DXsN8QzYQj82XDkUTw']
        ]
    ]
]);

这是解决办法。具有访问令牌的标头应位于多部分节之外

$this->request = $this->client->request('POST', 'request_url', [
            'headers' => [
                'Authorization' => 'Bearer access_token'
            ],
            'multipart' => [
                [
                    'Content-type' => 'multipart/form-data',
                    'name' => 'image_file',
                    'contents' => fopen('image_file_url', 'r')
                ]
            ]
        ]);

@PrzemekGawłowski我不是说您只需要以不同的格式设置代码,您需要提供多部分选项“关联数组数组”。在您的代码中,您只是给它一个关联数组。用一些额外的方括号括起来,就像我的例子。你是对的,我的错。所以现在我得到了这个错误消息:-(
Catchable Fatal error:GuzzleHttp\Psr7\Response类的对象无法在features\bootstrap\FeatureContext.php第246行中转换为string
在没有看到代码的情况下无法确定,但听起来好像缺少对getBody()方法的调用,例如echo(string)$Response->getBody();$response->getBody();
服务器错误:“发布我的url”导致“500内部服务器错误”响应:{“消息”:“请求缺少必需的参数,包含无效的参数值,包含更多参数(tr uncated…)(GuzzleHttp\Exception\ServerException)
现在听起来你发送了一个服务器不理解的请求。不过我们已经偏离主题了。这里有一些例子:谢谢,这些教程是以前的Guzzle版本的。我使用的是最新版本。第一个链接使用Guzzle 6I我这样做了,它仍然给我关于“内容”的相同错误”“行。