第一次使用cURL和guzzle。这可能是一个简单的问题,但希望能看到一个“ helloworld”示例。
这是我当前拥有的cURL:
curl --include --request POST \
--header "application/x-www-form-urlencoded" \
--header "X-Access-Token: ACCESS_TOKEN" \
--data-binary "grant_type=client_credentials&client_id=PUBLIC_KEY&client_secret=PRIVATE_KEY" \
'https://api.url.com/token'
这是the的代码:
$client = new Client(); //GuzzleHttp\Client
$result = $client->post('https://api.url.com/token', [
'form_params' => [
'sample-form-data' => 'value'
]
]);
我不确定如何使用guzzle运行cURL命令。产生的枪口代码看起来如何?
答案 0 :(得分:0)
您可以通过调用“ getBody”函数来获取/查看Guzzle调用的结果。在您的情况下,$ result-> getBody()
答案 1 :(得分:0)
所以这是将cURL转换为Guzzle的答案。也许它将像我一样帮助将来需要“ helloworld”的人们。这就是我通过Guzzle在PHP中运行cURL的方式:
$client = new Client();
$uri = 'https://api.url.com/token';
$headers = [
'Content-Type' => 'application/x-www-form-urlencoded',
'X-Access-Token' => $ACCESS_TOKEN
];
$body = 'grant_type=client_credentials&client_id='.$PUBLIC_KEY.'&client_secret='.$PRIVATE_KEY;
$result = $client->request('POST', $uri, [
'headers' => $headers,
'body' => $body
]);
json_decode($result->getBody()->getContents(), true);
不直观的两件事是您必须将“ application / x-www-form-urlencoded”指定为Content-Type。而“数据二进制”作为“主体”。
答案 2 :(得分:0)
对不起,您回答的太迟了,我发现您已经找到了a solution yourself。虽然有效,但不是像这样手动地编码您的身体有效载荷的方法或“最佳实践”。
Guzzle为此提供了一种更清洁的方法,并在内部建立了人体有效载荷:
$result = $client->post('https://api.url.com/token', [
'headers' => ['X-Access-Token' => 'ACCESS_TOKEN'],
'form_params' => [
'grant_type' => 'client_credentials',
'client_id' => 'PUBLIC_KEY',
'client_secret' => 'PRIVATE_KEY',
],
]);
由Guzzle自动完成与?
/ &
的正确串联以及添加application/x-www-form-urlencoded
的连接。这是上面的代码发出的请求:
POST /token HTTP/1.1
Content-Length: 76
User-Agent: GuzzleHttp/6.3.3 curl/7.57.0 PHP/7.2.2
Content-Type: application/x-www-form-urlencoded
Host: api.url.com
X-Access-Token: ACCESS_TOKEN
grant_type=client_credentials&client_id=PUBLIC_KEY&client_secret=PRIVATE_KEY