使用PHP的POST CURL请求获取错误’没有授权标头’ – envato api
我开始使用
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获取)
令人惊讶的是,每件事都与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),因为它会使您的系统不安全. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |