Skip to content
Advertisement

curl returning 301 error after migrating to https

We recently migrated to SSL, and the site works great with the exception of one function. The function uses curl in the code below to execute an api located on the same server. The url variable for this function is: news.hubsdev.com/administrator/index.php?option=com_api&task=acymailing.listcreate The $ch variable is – resource id=’384′ type=’curl’

        $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());
    curl_setopt($ch, CURLOPT_POST, count($data));
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);

The response is

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://news.hubsdev.com/administrator/index.php?option=com_api&amp;task=acymailing.listcreate">here</a>.</p>
</body></html>

We are using PHP version 5.6 hosted on AWS. I tested the ssl certificate and it passed with an “A”.

How can I determine why I am getting this error?

Thanks! Ken

Advertisement

Answer

You need to follow the redirect using the CURLOPT_FOLLOWLOCATION option:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

From the documentation:

TRUE to follow any “Location: ” header that the server sends as part of the HTTP header (note this is recursive, PHP will follow as many “Location: ” headers that it is sent, unless CURLOPT_MAXREDIRS is set).

Or you can simply use https:// in your code to avoid the redirect.

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement