使用PHP的POST CURL请求获取错误``未传递授权标头''-Envato API

普罗格纳

我开始使用Enavato API

到目前为止,我已经创建了一个应用程序,并在下面使用php代码发出POST curl请求之后,client_idclient_secret获取了codeaccess_key。https://api.envato.com/authorization

$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, true);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($curl, 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中获取)

字符串(80)“ {”错误“:” invalid_request“,”错误说明“:”未通过任何授权标头“}”

令人惊讶的是,每件事都与Postman一起工作,并且我得到了带有成功200状态代码的“ refresh_token”和“ access_token”。

我知道我错过了一些东西,但找不到什么?

汉斯Z.

您正在使用curl_setopt($curl, CURLOPT_POSTFIELDS, $params);$params是数组。这将导致HTTP POST消息具有multipart/form-data内容类型和格式。但是规范说内容类型应该是application/x-www-form-urlencoded您可以使用以下方法实现此目的:

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

你也不需要urlencoderedirect_uri参数,因为http_build_query会为你做它。

最后,请勿关闭SSL验证(CURLOPT_SSL_VERIFYHOSTCURLOPT_SSL_VERIFYPEER),因为它会使您的系统不安全。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Envato API 从服务器发送 POST 请求

PHP cURL格式错误的授权标头REST API基本授权

PHP POST请求中缺少授权标头

如何使用curl设置授权标头

如何使用授权标头请求 Http

使用PHP或HTML更改HTTP请求授权标头

Bing API请求的Ajax授权标头是什么?

在 componentDidMount 中带有 HTTP 授权标头的 API 请求

无法获取 - Cors 错误 - 使用授权标头获取时 - 邮递员工作正常

如何获取将在php curl请求中的授权标头中解析的FCM服务器密钥?

在 ASP.net Web API 中发生授权之前尝试使用 OWIN 注入授权标头

如何使用PHP / cURL验证到Discogs API的POST

使用授权标头时,CORS标头错误

jQuery - 无法使用授权标头执行 ajax 请求

HTTP 授权标头未在 ionic 2 中使用 codeigniter api 发送

在Postman中使用Blob Service API来放置Blob-授权标头

如何使用授权标头PHP

api授权标头r httr

Couchdb jQuery API添加授权标头

Api Bundle Symfony设置授权标头

如何使用Rails从API获取POST请求

我的 Bootstrap 网站需要很长时间才能加载。我使用了 Envato 的模板 Celia 来构建它

web api:具有两个授权标头的请求最终没有

如何在Angular的api调用中传递授权标头令牌

使用Fetch API的POST请求?

React和Redux:401未经授权的错误POST API请求

从jquery发送到Web API客户端的授权标头未正确接收

使用Identity Server 4和.net核心身份,无需请求中的授权标题即可对API进行授权

如何为Azure存储构造授权标头获取容器属性REST API