如何通过guzzle运行cURL

时间:2018-07-08 11:08:40

标签: php curl guzzle

第一次使用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命令。产生的枪口代码看起来如何?

3 个答案:

答案 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