有人知道用Guzzle发布JSON的正确方法吗?
$request = $this->client->post(self::URL_REGISTER,array(
'content-type' => 'application/json'
),array(json_encode($_POST)));
我从服务器得到一个内部服务器错误响应。它使用Chrome邮差工作。
有人知道用Guzzle发布JSON的正确方法吗?
$request = $this->client->post(self::URL_REGISTER,array(
'content-type' => 'application/json'
),array(json_encode($_POST)));
我从服务器得到一个内部服务器错误响应。它使用Chrome邮差工作。
当前回答
你可以使用硬编码的json属性作为键,或者你可以方便地使用GuzzleHttp\RequestOptions:: json常量。
下面是使用硬编码的json字符串的例子。
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('url', [
'json' => ['foo' => 'bar']
]);
见文档。
其他回答
Php版本:5.6
Symfony版本:2.3
暴食:5.0
我最近有一次用Guzzle发送json的经历。我使用的是Symfony 2.3,所以我的暴饮暴食版本可以稍微老一点。
我还会展示如何使用调试模式,你可以在发送请求之前看到它,
当我提出如下所示的请求时,得到了成功的响应;
use GuzzleHttp\Client;
$headers = [
'Authorization' => 'Bearer ' . $token,
'Accept' => 'application/json',
"Content-Type" => "application/json"
];
$body = json_encode($requestBody);
$client = new Client();
$client->setDefaultOption('headers', $headers);
$client->setDefaultOption('verify', false);
$client->setDefaultOption('debug', true);
$response = $client->post($endPoint, array('body'=> $body));
dump($response->getBody()->getContents());
我使用下面的代码,工作非常可靠。
JSON数据在参数$request中传递,特定的请求类型在变量$searchType中传递。
该代码包含一个陷阱,用于检测和报告不成功或无效的调用,然后返回false。
如果调用成功,json_decode ($result->getBody(), $return=true)返回一个结果数组。
public function callAPI($request, $searchType) {
$guzzleClient = new GuzzleHttp\Client(["base_uri" => "https://example.com"]);
try {
$result = $guzzleClient->post( $searchType, ["json" => $request]);
} catch (Exception $e) {
$error = $e->getMessage();
$error .= '<pre>'.print_r($request, $return=true).'</pre>';
$error .= 'No returnable data';
Event::logError(__LINE__, __FILE__, $error);
return false;
}
return json_decode($result->getBody(), $return=true);
}
$client = new \GuzzleHttp\Client(['base_uri' => 'http://example.com/api']);
$response = $client->post('/save', [
'json' => [
'name' => 'John Doe'
]
]);
return $response->getBody();
对于Guzzle <= 4:
这是一个原始的post请求,所以把JSON放在body中解决了这个问题
$request = $this->client->post(
$url,
[
'content-type' => 'application/json'
],
);
$request->setBody($data); #set body!
$response = $request->send();
来自@user3379466的答案可以通过设置$data来工作,如下所示:
$data = "{'some_key' : 'some_value'}";
我们的项目需要的是将一个变量插入到json字符串中的数组中,我这样做如下(如果这有助于任何人):
$data = "{\"collection\" : [$existing_variable]}";
因此,与$existing_variable是,说,90210,你得到:
echo $data;
//{"collection" : [90210]}
另外值得注意的是,你可能还想设置'Accept' => 'application/json'以防你碰到的端点关心这类事情。