-1

在我的应用程序中,我使用的是 Commercetools API。

要从他们的 API 获取数据,我需要调用一个端点。

以下是我用来获取产品的端点。

https://api.sphere.io/vc-1209/products -H "Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS"

当我在终端上运行 URL 时

curl https://api.sphere.io/vc-1209/products -H "Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS"

它给了我所有产品的回应。

但是当我从 PHP 的 cURL 执行相同的 URL 时,它不起作用。

$url = 'https://api.sphere.io/vc-1209/products -H "Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS"';

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($curl);

print_r($response);

我回来了:

客户端发送了错误的请求。

4

3 回答 3

4

在您的示例中,您需要在CURLOPT_HTTPHEADER此处设置所有内容,然后才能获得响应。

<?php
$url = 'https://api.sphere.io/vc-1209/products';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS'
      ));
$response = curl_exec($ch);
var_dump($response);
?>

当您在本地主机上运行代码时,它bool(false)可能只是因为https请求而给您。

当我在启用 https 的生产环境中点击您的请求时,它给了我以下回复:

string(130) "{"statusCode":401,"message":"invalid_token","errors":[{"code":"invalid_token","message":"invalid_token"}],"error":"invalid_token “}”

此错误清楚地表明,您需要将access tokenCURL 请求作为标头添加。

另请注意,curl 状态码为 401,这意味着您无权执行此请求,您必须添加访问令牌。

于 2016-10-18T10:08:58.123 回答
1

问题很明显,您将 添加-H "Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS"到 URL 中,这将导致 PHP 请求 URL:

https://api.sphere.io/vc-1209/products%20-H%22Authorization%3A%20Bearer%20-5DVqQFgkd_SDGthsFgtepS%22

如果要在 PHP 的 cURL 中设置自定义标头,请设置以下CURLOPT_HTTPHEADERS选项:

$curl = curl_init('https://api.sphere.io/vc-1209/products');
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array( // Set Headers
    'Authorization: Bearer -5DVqQFgkd_SDGthsFgtepS'
));

$response = curl_exec($curl);
print_r($response);
curl_close($curl); // Close cURL
于 2016-10-18T10:03:12.077 回答
1

您需要适当地设置标题:

$url = 'https://api.sphere.io/vc-1209/products';
$bearerToken = "someToken";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Bearer '.$bearerToken));
$response = curl_exec($curl);
于 2016-10-18T10:04:19.793 回答