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

在多部分请求中大量发送空数组

劳通
2023-03-14

我使用Guzzle 6向第三方api(cloud Foundry)发送多部分表单请求。api采用两个参数“资源”和“应用程序”。这是我打电话的医生。简而言之,这会将二进制文件部署到应用程序服务器。下面是我在Guzzle中使用的代码。当试图发送一个空数组作为“resource”参数的内容时,我收到了一个“invalid resource type”错误。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

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

共有1个答案

景国兴
2023-03-14

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

首先,我将guzz设置为调试,并关闭了异常(见下文)。如果未关闭,Guzz将屏蔽来自第三方的实际异常。我得到了400个错误的响应,这是正确的,但它隐藏了我尝试发送的文件无法解压缩的实际消息。然后我决定更改多部分请求以使用guzz文档中的“fopen”选项,而不是使用来自Cloud doundry文档的“@”。这解决了问题,现在一切正常。有关更新的请求,请参阅belwo。

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

狂饮请求:

  $response = $this->client->put($this->baseUrl . "apps/cb44bb975-654e-4516-8ce9-b37bc2f93a87/bits", [
         'multipart' => [
             [
                 'name' => 'resources',
                 'contents' => '[]'
             ],
             [
                 'name' => 'application',
                 'contents' => fopen('/tmp/cfdownloadYQfOp7', 'r')
             ]
         ]
     ]);
 类似资料:
  • 在我正在开发的React web应用程序中,有一个包含一些用户数据的文件上传部分。然而,当我试图上传文件时,服务器抛出以下错误。 组织。阿帕奇。公猫util。http。文件上传。FileUploadException:请求被拒绝,因为找不到多部分边界 反应侧 我的Spring Boot控制器如下所示。

  • 我试图用Java编写一个客户机来从RESTful web服务中获取数据。我已经看了几个教程和视频,但有一些我不明白。让我从这个开始。我能够使用PEST编写一个clientin PHP来获得成功的响应。这是一个如何发出请求的示例: 我发现有些事情很尴尬,我不太熟悉RESTful客户。出于某种原因,该站点使用POST请求而不是GET请求。凭据作为表单数据和任何查询参数在主体中传递。我查看的教程不是这样

  • 如何用Python发送带有请求的?如何发送一个文件,我明白,但如何发送表单数据的方法不能理解。

  • 问题内容: 我有以下POST请求表格(简化): 我尝试发送POST请求: 但它返回状态并带有以下注释: 请指出我的错误。我应该进行哪些更改才能使其正常工作? 问题答案: 您自己设置标题,包括边界。不要这样 会为您生成一个边界并将其设置在标头中,但是如果您 已经 设置了标头,那么生成的有效负载和标头将不匹配。只需将标题全部放下即可: 请注意,我还给了零件一个文件名(路径的基本名称)。 有关多部分PO

  • 我正在使用Nodejs连接GoogleApis v35。0.0告诉Google更新或删除Google索引中的页面。当我通过Google索引批处理请求发送请求时,我陷入了多部分/混合请求,多部分的主体。 通过遵循索引API文档,我可以向Google发送一个单独的页面更新请求。但是由于谷歌每天最多有200个请求,所以我需要更新更多的URL。所以,我尝试使用谷歌索引批量请求,它最多可以对100个单独的请

  • 我目前正在使用Chrome Addon Postman-REST客户端轻松创建POST/GET请求。 现在我想调试一个上传脚本,我正在寻找一种方法,使请求编码为“多部分/表单-数据”,这样我也可以发送一个文件。