【发布时间】:2015-09-14 06:30:59
【问题描述】:
这应该很简单,但我已经花了几个小时寻找答案并且真的被卡住了。我正在构建一个基本的 Laravel 应用程序,并正在使用 Guzzle 来替换我目前正在发出的 CURL 请求。所有 CURL 函数都在正文中使用原始 JSON 变量。
我正在尝试创建一个有效的 Guzzle 客户端,但服务器正在响应“无效请求”,我只是想知道我发布的 JSON 是否有问题。我开始怀疑你是否不能在 Guzzle POST 请求正文中使用原始 JSON?我知道标头正在工作,因为我从服务器接收到有效响应,并且我知道 JSON 是有效的,因为它当前在 CURL 请求中工作。所以我被卡住了:-(
非常感谢任何帮助。
$headers = array(
'NETOAPI_KEY' => env('NETO_API_KEY'),
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'NETOAPI_ACTION' => 'GetOrder'
);
// JSON Data for API post
$GetOrder = '{
"Filter": {
"OrderID": "N10139",
"OutputSelector": [
"OrderStatus"
]
}
}';
$client = new client();
$res = $client->post(env('NETO_API_URL'), [ 'headers' => $headers ], [ 'body' => $GetOrder ]);
return $res->getBody();
【问题讨论】:
-
大家好。感谢您的快速回复。我最终意识到我是一个智障,并且将标题和正文放在单独的数组中。将其更改为: [ 'headers' => $headers ], [ 'body' => $GetOrder ] 改为: [ 'headers' => $headers, 'body' => $GetOrder ]
-
即便如此,您也可以使用“json”选项,如我的回答所示;它简化了一些事情。
-
谢谢杰克。这是一个有用的答案,但我有很多调用很长的 JSON 查询,我不想将它们全部转换为 PHP 以使用 json 函数
-
不知道为什么要自己构建 JSON 字符串,这似乎适得其反。