【问题标题】:Guzzle send empty array in multipart requestGuzzle 在多部分请求中发送空数组
【发布时间】:2015-08-12 13:33:36
【问题描述】:

我正在使用Guzzle 6 向第 3 方 api(cloud Foundry)发送多部分表单请求。该 API 采用 2 个参数“资源”和“应用程序”。 here 是我正在拨打的电话的文档。简而言之,这会将二进制文件部署到应用程序服务器。下面是我在 Guzzle 中使用的代码。尝试将空数组作为“资源”参数的内容发送时,出现“资源类型无效”错误。 Guzzle 似乎只允许在这里使用字符串? api 要求在推送新的二进制文件时发送一个空数组。

代码如下:

 $response = $this->client->put($this->baseUrl . "apps/7887990-654e-4516-8ce9-b37bc2f93a87/bits", [
         'multipart' => [
             [
                 'name' => 'resources',
                 'contents' => []
             ],
             [
                 'name' => 'application',
                 'contents' => '@/tmp/cfdownloadYQfOp7',
             ]
         ]
     ]);

上述失败并出现上述错误,将 ti 更改为字符串会导致对 api 的请求错误。

这是正常工作的 curl 命令:

curl -k -X PUT -H "Authorization:token here" -F 'resources=[]' -F "application=@/tmp/cfdownloadF9AxlE" https://api.cloudfoundry.com/v2/apps/2d0f491b-d8dd-4b3a-96f9-58b3678e5dad/bits

有谁知道如何使用上面的 guzzle 代码让它工作?

【问题讨论】:

  • 你试过引用括号吗?即'contents' => '[]'
  • 是的,我试过了,我只是发现了这个问题。我会提供答案

标签: php laravel guzzle


【解决方案1】:

我已经解决了这个问题。事实证明,这不是发送数组的问题,而是 guzzle 抛出的另一个错误掩盖了真正的问题。

首先我将 guzzle 设置为调试,并关闭异常(见下文)。如果这没有关闭,Guzzle 将掩盖来自第三方的实际异常。我收到了 400 错误响应,这是正确的,但它隐藏了实际消息,即我试图发送的文件无法解压缩。然后我决定将多部分请求更改为使用 guzzle 文档中的“fopen”选项,而不是使用 cloudfoundry 文档中的“@”。这解决了问题,现在一切正常。更新请求见下文。

new Client(['debug'=>true,'exceptions'=>false,'headers' => ['Authorization' => "Bearer " . $token, "Accept" => "application/json"], 'verify' => false])

guzzle 请求:

  $response = $this->client->put($this->baseUrl . "apps/cb44bb975-654e-4516-8ce9-b37bc2f93a87/bits", [
         'multipart' => [
             [
                 'name' => 'resources',
                 'contents' => '[]'
             ],
             [
                 'name' => 'application',
                 'contents' => fopen('/tmp/cfdownloadYQfOp7', 'r')
             ]
         ]
     ]);

【讨论】:

    猜你喜欢
    • 2017-05-26
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2020-03-15
    • 1970-01-01
    • 2018-02-07
    相关资源
    最近更新 更多