如何在PHP中使用CURL来处理访问API时的301(Moved Permanently)错误?

时间:2017-06-12 07:41:31

标签: php curl

我必须使用GET请求访问API,但结果是:

  

301永久移动。

这是我的代码:

$curl = curl_init();
    $url="https://xxx.yyy.com/zzz/v1.0";
    curl_setopt_array($curl, array(
                CURLOPT_URL => $url,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_CUSTOMREQUEST => "GET",
                CURLOPT_HTTPHEADER => array(
                    "authorization: Bearer sadhuUasjhda"
                      ),
                    ));

    $result = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }

    print_r($result);exit;

我已经读过这个问题可以通过添加CURLOPT_POSTREDIR来解决,但只有在我使用POST时才能解决。

我尝试使用CURLOPT_FOLLOWLOCATION,但我遇到了另一个问题,结果就像

  

CURL错误#:SSL证书问题:无法获得本地颁发者证书。

仅供参考,我使用的是Windows和XAMPP。然后我尝试按照post的说明进行操作,但结果仍然相同。

1 个答案:

答案 0 :(得分:1)

感谢Rendy Eko Prastiyo,解决方案是将CURLOPT_SSL_VERIFYPEER设置为false并将CURLOPT_FOLLOWLOCATION设置为true,因此代码为

$curl = curl_init();
$url="https://xxx.yyy.com/zzz/v1.0";
curl_setopt_array($curl, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_HTTPHEADER => array(
                "authorization: Bearer sadhuUasjhda"
                  ),
                ));

$result = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

print_r($result);exit;