繁体   English   中英

CURL无法从PHP工作

[英]CURL not working from php

在我的应用中,我正在使用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);

我回来了:

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

在示例中,您需要在此处设置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);
?>

当您在本地主机中运行代码时,可能只是由于https请求而给您bool(false)

当我在启用了https的生产环境中遇到您的请求时,它会给我以下响应:

字符串(130)“ {” statusCode“:401,” message“:” invalid_token“,” errors“:[{” code“:” invalid_token“,” message“:” invalid_token“}]],” error“:” invalid_token “}”

此错误清楚地表明,您需要在CURL请求中添加access token作为标头。

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

问题很明显,您将-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

您需要适当设置标题:

$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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM