guzzle ver 6 post 方法不起作用
Posted
技术标签:
【中文标题】guzzle ver 6 post 方法不起作用【英文标题】:guzzle ver 6 post method is not woking 【发布时间】:2015-08-31 20:06:46 【问题描述】:在邮递员中工作(原始格式数据与 application/json 类型) 带嘴6
url-http://vm.xxxxx.com/v1/hirejob/
"company_name":" company_name",
"last_date_apply":"06/12/2015",
"rid":"89498"
所以我得到响应 201 创建 但在狂饮中
$client = new Client();
$data = array();
$data['company_name'] = "company_name";
$data['last_date_apply'] = "06/12/2015";
$data['rid'] = "89498";
$url='http://vm.xxxxx.com/v1/hirejob/';
$data=json_encode($data);
try
$request = $client->post($url,array(
'content-type' => 'application/json'
),array());
catch (ServerException $e)
//getting GuzzleHttp\Exception\ServerException Server error: 500
我在vendor/guzzlehttp/guzzle/src/Middleware.php
上遇到错误
第 69 行
? new ServerException("Server error: $code", $request, $response)
【问题讨论】:
How can I use Guzzle to send a POST request in JSON? 的可能重复项 【参考方案1】:您实际上并没有设置请求正文,但可以说传输 JSON 数据的最简单方法是使用专用请求选项:
$request = $client->post($url, [
'json' => [
'company_name' => 'company_name',
'last_date_apply' => '06/12/2015',
'rid' => '89498',
],
]);
【讨论】:
@RahulG 不过,您的问题中没有提到这一点。 @RahulG 我已经更新了我的答案;它应该适用于最新版本的 lib 谢谢你节省了我的时间【参考方案2】:您需要使用 json_encode() JSON_FORCE_OBJECT 标志作为第二个参数。像这样:
$data = json_encode($data, JSON_FORCE_OBJECT);
如果没有 JSON_FORCE_OBJECT 标志,它将创建一个带有括号表示法而不是大括号表示法的 json 数组。
另外,尝试发送这样的请求:
$request = $client->post($url, [
'headers' => [ 'Content-Type' => 'application/json' ],
'body' => $data
]);
【讨论】:
$data = json_encode($data, JSON_FORCE_OBJECT);不工作 结合上面的答案试试这个。 您必须设置要发送的数据,并且需要将其正确格式化为 JSON 对象。 我检查的是那个是 json 对象 我刚刚更新了我的答案。现在看看这个请求是否适合你。以上是关于guzzle ver 6 post 方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 guzzle 6 发送 (POST) xml 的正确方法
如何在不使用 curl 和 guzzle 的情况下从控制器 Laravel 调用 API,因为它不起作用 [关闭]