Instagram API调用以使用CURL检索授权代码返回空

时间:2018-11-25 13:12:50

标签: php api curl instagram

我正在尝试使用PHP中的CURL设置Instagram API提要,但是在尝试成功检索身份验证代码之前,该字符串返回空,之后再成功调用以检索用户的内容:

$uri = 'https://api.instagram.com/oauth/authorize/';

$data = [
    'client_id' => $client_id,
    'redirect_uri' => $redirect_uri,
    'response_type' => 'code'
];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $uri);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_NOBODY, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $result = curl_exec($ch);
    curl_close($ch);
     var_dump($result);

但是,当我直接在浏览器中访问URL时,它会使用所需的代码返回到重定向URI:

https://api.instagram.com/oauth/authorize/?client_id=CLIENT_ID_HERE&redirect_uri=REDIRECT_HERE&response_type=code

即浏览器成功重定向(包括“代码” GET数据)到http://REDIRECT_HERE/?code=XXXXXXXXXXXX

我基本上想将auth代码存储在变量中,以供以后使用,而不是使用通过浏览器重定向获取代码的手动方式。

1 个答案:

答案 0 :(得分:1)

您的浏览器以GET请求发送URL RFC-1738样式的数据,而您的php curl代码以multipart/form-data编码的POST请求发送数据,这也难怪服务器会感到困惑。要像使用浏览器一样使用php发送url中的数据,请摆脱curl_setopt($ch, CURLOPT_POST, true);(因为它告诉curl执行POST请求而不是默认的GET请求,因此您的浏览器会执行GET请求)和{{ 1}}(因为它告诉curl在请求正文中发送它,而浏览器在url中发送它),然后将CURLOPT_URL更改为

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

然后,您的php curl请求应该与您的浏览器请求大致匹配,并获得相同的响应。 (仍然会有细微的差异,例如不同的User-Agent标头,Accept标头和Accept-Encoding标头,但这通常没有关系)