URL编码与Curl-PHP

URL编码与Curl-PHP,php,curl,urlencode,url-encoding,Php,Curl,Urlencode,Url Encoding,我做了建议的更改,但仍收到类似错误: {“错误”:“无效的请求”,“错误描述”:“无效的授予类型”} 如果url编码设置不正确,则可能发生此错误。更新代码如下 任何帮助都将不胜感激 <?php $client_id = '...'; $redirect_uri = 'http://website.com/foursquare2.php'; $client_secret = '...'; $code = $_REQUEST['code']; $ch = curl_init(); cur

我做了建议的更改,但仍收到类似错误:

{“错误”:“无效的请求”,“错误描述”:“无效的授予类型”}

如果url编码设置不正确,则可能发生此错误。更新代码如下 任何帮助都将不胜感激

<?php

$client_id = '...';
$redirect_uri = 'http://website.com/foursquare2.php';
$client_secret = '...';
$code = $_REQUEST['code'];

$ch = curl_init();

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_URL, "https://id.shoeboxed.com/oauth/token");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'grant_type' => 'authorization_code',
'code' => $code,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri
));

$response = curl_exec($ch);

$err = curl_error($ch);
curl_close($ch);
if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
?>

您的代码正在以
多部分/表单数据
格式发送数据。当您给CURLOPT_POST一个数组时,curl将自动以
多部分/表单数据
格式对该数组中的数据进行编码。然后,您用头告诉服务器,
此数据采用application/x-www-form-urlencoded格式
,服务器将尝试对其进行解析,并失败,从而导致收到错误

首先,去掉curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-Type:application/x-www-form-urlencoded')全部。如果您使用的是application/x-www-form-urlencoded,php/curl会自动为您添加该标题,与您不同的是,php/curl不会出现任何打字错误(开发人员在每次发布之前都会自动测试以确保这些内容是正确的),同样,如果您使用的是
multipart/form data
格式,php/curl会为您添加该标题,所以不要手动添加这两个特定的标题

如果您想使用
多部分/表单数据
格式,只需去掉标题中另有说明即可。但是如果您想使用
application/x-www-form-urlencoded
格式,PHP有一个内置函数来编码为这种格式,名为,so do


(同时去掉内容类型标题,它将自动添加。)

数组(“应用程序/x-www-form-urlencoded”)
可能需要是
数组(“内容类型:应用程序/x-www-form-urlencoded”)
?不管怎样,我认为curl应该能够自动处理这个标题。可能是Thx的副本,但还需要一些其他的更改。我对数组做了建议的更改(“内容类型:application/x-www-form-urlencoded”)。我现在收到错误{“error”:“invalid_request”,“error_description”:“invalid grant type”}。如果未正确设置urlencode,则可能发生此错误。任何建议,使这项工作是赞赏的。
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
'grant_type' => 'authorization_code',
'code' => $code,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri
)));