加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用PHP的POST CURL请求获取错误’没有授权标头’ – envato api

发布时间:2020-12-13 16:56:32 所属栏目:PHP教程 来源:网络整理
导读:我开始使用 Enavato API了 到目前为止,我已经创建了一个应用程序,得到了client_id client_secret并设法从https://api.envato.com/authorization获取代码access_key,之后我使用下面的php代码发出POST卷曲请求 $client_id = '***********';$client_secret = '*
我开始使用 Enavato API了

到目前为止,我已经创建了一个应用程序,得到了client_id& client_secret并设法从https://api.envato.com/authorization获取代码access_key,之后我使用下面的php代码发出POST卷曲请求

$client_id      = '***********';
$client_secret  = '***********';
$redirect_uri   = urlencode('http://localhost:3000');

if(isset($_GET["code"])) :  

  $apiUrl = 'https://api.envato.com/token';
  $params = array(
    'grant_type'    => 'authorization_code','code'          => $_GET["code"],'redirect_uri'  => $redirect_uri,'client_id'     => $client_id,'client_secret' => $client_secret,);

  $curl = curl_init();
  $f = fopen('request.txt','w');
  curl_setopt($curl,CURLOPT_URL,$apiUrl);
  curl_setopt($curl,CURLOPT_POST,1);
  curl_setopt($curl,CURLOPT_VERBOSE,true);
  curl_setopt($curl,CURLOPT_HEADER,CURLOPT_RETURNTRANSFER,CURLOPT_SSL_VERIFYHOST,false);
  curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,CURLOPT_POSTFIELDS,$params);
  curl_setopt($curl,CURLOPT_STDERR,$f);

  $result = curl_exec($curl);
  fclose($f);

  // Check if any error occurred
  if(empty($result))
  { 
    // die(curl_errno($curl));
    // die(curl_error($curl));
     $info = curl_getinfo($curl);

     echo '<br><br>';
     echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
     echo '<br><br>';
     var_dump($info);
     echo '<br><br>';
  }

  var_dump($result);

  // Close handle
  curl_close($curl);

endif;

这是request.txt转储

* Hostname was found in DNS cache
* Hostname in DNS cache was stale,zapped
*   Trying 107.23.230.180...
* Connected to api.envato.com (107.23.230.180) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
* Server certificate: *.envato.com
* Server certificate: RapidSSL SHA256 CA - G3
* Server certificate: GeoTrust Global CA
> POST /token HTTP/1.1
Host: api.envato.com
Accept: */*
Content-Length: 699
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------1a95a06d7b815306

< HTTP/1.1 100 Continue
< HTTP/1.1 400 Bad Request
< Access-Control-Allow-Origin: *
< Cache-Control: no-store
< Content-Type: application/json; charset=utf-8
< Date: Sun,17 May 2015 17:03:41 GMT
< Pragma: no-cache
* Server nginx/1.7.10 is not blacklisted
< Server: nginx/1.7.10
< set-cookie: connect.sid=s%3ARC9gGye-Txp4KLp67M9ESspXijYoUc8i.pT3jYHvu1WyOsSjwsuQzEsy5hLQlc2QpmHkZRm05pXo; Path=/; HttpOnly
< X-Frame-Options: Deny
< X-Powered-By: Express
< Content-Length: 80
< Connection: keep-alive
* HTTP error before end of send,stop sending
< 
* Closing connection 0

最后是错误(以JSON获取)

string(80) “{“error”:”invalid_request”,”error_description”:”No authorization header passed”}”

令人惊讶的是,每件事都与Postman一起使用,我获得了“refresh_token”和“access_token”,并获得了成功的200状态代码.

我知道我错过了一些但却找不到的东西?

解决方法

你正在使用curl_setopt($curl,$params); $params是一个数组.这导致HTTP POST消息具有multipart / form-data内容类型和格式.但规范说内容类型应该是application / x-www-form-urlencoded.你可以通过使用:

curl_setopt($curl,http_build_query($params));

你也不需要对redirect_uri参数进行urlencode,因为http_build_query会为你做这件事.

最后,不要关闭SSL验证(CURLOPT_SSL_VERIFYHOST,CURLOPT_SSL_VERIFYPEER),因为它会使您的系统不安全.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读