So, let’s say you’re trying to get a web-server up and running. As far as you can tell, you’ve configured everything more or less correctly – there are no obvious errors in any of your settings, and all your working parts appear to be working as intended. But there’s a problem – a significant one.
For some reason, no matter what you do, cURL can’t seem to connect with your server. And instead of returning a helpful error message that you could potentially use to troubleshoot things, all it’s giving you is an empty response. What can you do?
Examine The Server
Well…first thing’s first, you’re going to want to check things from the server side. See, there’s a subtle difference between ‘empty response’ and ‘no response.’ The latter signifies that there’s something completely cutting off connectivity to the server, while the former…well, it’s a little complex.
Go through your error logs with a fine-toothed comb. Is there anything unusual? Something that might indicate a configuration or networking glitch? One common cause of the error is that your server might be configured to only listen on localhost.
If that doesn’t end up being the cause of the problem, you’ll need to go a little deeper.
Check With Telnet (Or Something Similar)
Instead of going through cURL, try pinging the site you’re trying to reach with Telnet. The response that your connection attempt returns will be exactly what cURL sees when it tries to connect (but which it unhelpfully obfuscates from you). Now, depending on what what you see here, you might draw one of several conclusions:
- You’re attempting to connect to a website that’s a name-based virtual host, meaning it cannot be reached via IP address.
- Something’s gone wrong with the hostname – you may have mistyped something. Note that using GET instead of POST for parameters will give you a more concrete answer.
- The issue may also be tied to the 100-continue header. Try running curl_getinfo($ch, CURLINFO_HTTP_CODE), and check the result.
Examine Your SSL
There’s one last issue that might be the cause of this mess – a misconfiguration in SSL, or an unpatched instance of OpenSSL. If none of the above steps worked to solve your issues with cURL, this might be the key to getting things up and running again.