[英]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.