当前位置: 首页 > 知识库问答 >
问题:

狂饮6发送多部分数据

白昊乾
2023-03-14

我想向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']
            ]]);

但我得到错误

可捕获的致命错误:传递给guzzle http \ PSR 7 \ multipart stream::add element()的参数2必须是数组类型,字符串给定,在vendor \ guzzle http \ PSR 7 \ src \ multipart stream . PHP的第70行调用,并在vendor \ guzzle http \ PSR 7 \ src \ multipart stream . PHP的第79行定义

在Guzzle 6中,文档是这样的:http://docs.guzzlephp.org/en/latest/request-options.html#multipart

谁知道我在哪里犯了错误?

共有3个答案

唐啸
2023-03-14

试试这个为我工作

use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Utils;

$this->client = new Client([
        'base_uri' => 'https://baseurl'
    ]);

$body = Utils::tryFopen($tempPath . $fileName, 'r');
$res = $this->client->request(
                 'POST',
                 'url',
                  [
                     'headers' => [
                        ...
                     ],
                     'body' => $body
                  ]
            );
呼延博易
2023-03-14

以下是解决方案。具有访问令牌的标头应在多部分部分之外。

$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')
                ]
            ]
        ]);
步德宇
2023-03-14

根据文档,“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']
        ]
    ]
]);
 类似资料:
  • 我必须使用文件发送数组数据。仅使用数据即可正常工作: 但是,既然我不能将“form_params”与“multipart”一起使用,那么如何发送带有数组和布尔数据的文件呢? 我试过了: 但是我收到一个错误,因为“contents”不接受布尔值或数组值。 我需要一些帮助。 谢谢 更新:我无法解决这个问题,最后我不得不使用一个不太好的解决方案,包括作为查询字符串的表单文件参数并仅使用Multipart

  • 这是为了与ecomdash api一起使用,因为使用此方法时,所有json字符串都必须用方括号括起来,就像有一个产品数组一样。因此,对于一系列产品来说,json_encode确实可以像预期的那样工作,但如果只更新一个产品,则必须手动在json周围添加方括号。因此,在设置请求时,必须使用body而不是json。这是最后一段有效的代码。 我已经到处搜索,尝试了一百万件事,但我一直得到相同的错误时,试图

  • 更新:似乎用户代理并不是某些主机提供HTML所需的唯一标头,我还必须添加“accepts”标头,最终这为我解决了许多主机的问题: 我试图使用Guzzle来检索一些网站,但收到了403禁止错误(当它们在浏览器中工作正常时),我怀疑这是由于主机禁止了非标准的用户代理。为了解决这个问题,我试图在Guzzle中设置用户代理来模仿浏览器,但是我找不到任何有效的方法。我可以浏览网站,也可以使用WGET和CUR

  • 我在使用古斯的时候有奇怪的问题 当我试图模拟一个错误的请求(例如,返回状态码404的请求)时,Guzzle抛出一个ClientException,其中包含该请求失败的所有细节。 当我试图捕捉这个异常时,我的脚本退出,并带有一个致命的错误,说明我没有捕捉到异常,它显示了一个XDebug跟踪,说明我有一个内存泄漏。 我的代码如下所示: 注意:httpClient是GuzzleHttp/CLient的有

  • 我正在尝试为一些网站检索超文本标记语言。我正在使用PHPfile_get_contents它运行得非常好,但是很慢,而且有点有限,所以我决定试试Guzzes。不幸的是,我发现很难阻止Guzzes抛出异常,即使使用他们记录的异常处理。我的代码非常简单: 我不断得到以下错误: GuzzleHttp\Exception\ConnectException cURL错误28:无法连接到acme.biz端口8

  • 问题内容: 我可以将文件作为多部分发送到servlet吗?我正在制作表单并将其作为多部分提交,但是以某种方式我没有收到成功上传它的回复。我不希望刷新页面,因此它必须由ajax进行。 问题答案: 只有使用XHR API(以前称为“ XHR2”或“ XHR Level 2”的一部分,当前称为“ XHR高级功能”)才有可能。 有了这个HTML, 您可以按以下方式上传: XHR将注意适当的头和请求主体编码