如何使用 Guzzle 发送 PUT 请求?

Posted

技术标签:

【中文标题】如何使用 Guzzle 发送 PUT 请求?【英文标题】:How can I use Guzzle to send a PUT request? 【发布时间】:2019-12-12 15:35:12 【问题描述】:

有人知道使用 Guzzle 进行 PUT 的正确方法吗?我的代码不起作用 但我的帖子方法有效

 $enrolment = $client->request('PUT', $url,[
       'form_params' => [
           'contactID' =>12345,
           'type' =>'w'
        ],
       'headers' => [
           'apitoken' => $api_token,
           'wstoken' => $ws_token
        ]
 ]);

导致500 Internal Server Error 响应:↵"DATA":"","ERROR":true,"MESSAGES":"key [TYPE] 不存在","CODE":"0","详情":""

【问题讨论】:

【参考方案1】:

PUT 请求不接受 form_params 类型作为请求选项,因此它可能会忽略该设置。

来自Docs:

form_params

用于发送应用程序/x-www-form-urlencoded POST 请求。

也许你可以尝试使用 json 来处理PUT 请求。

在json part of Docs 中,它也使用PUT

$enrolment = $client->request('PUT', $url,[
       'json' => [
           'contactID' =>12345,
           'type' =>'w'
        ],
       'headers' => [
           'apitoken' => $api_token,
           'wstoken' => $ws_token
        ]
 ]);

【讨论】:

如果它不起作用,我会检查这两件事: 1. 检查请求,看看 json 数据部分是否确实在发送。 2.查看响应服务器是否接受json格式的数据。既然你说form_params 的 POST 版本工作正常,也许它只接受表单数据。

以上是关于如何使用 Guzzle 发送 PUT 请求?的主要内容,如果未能解决你的问题,请参考以下文章

PHP Guzzle接口请求库应用

利用Guzzle实现另一种PHP异步发送邮件(laravel5.4)

Guzzle同步发送请求

Guzzlehttp - 如何从 Guzzle 6 获取响应的正文?

PHP 使用 Guzzle 执行 HTTP 请求

PHP 使用 Guzzle 执行 HTTP 请求