Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 690
HamletHub Avatar asked May 07 '18 18:05

HamletHub


People also ask

Why am I getting 301 Moved Permanently?

The HyperText Transfer Protocol (HTTP) 301 Moved Permanently redirect status response code indicates that the requested resource has been definitively moved to the URL given by the Location headers. A browser redirects to the new URL and search engines update their links to the resource.

What is error code 301?

November 23, 2017. A 301 Moved Permanently is an HTTP response status code indicating that the requested resource has been permanently moved to a new URL provided by the Location response header.


1 Answers

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.

like image 185
Spoody Avatar answered Sep 29 '22 15:09

Spoody