"enetunreach" error message when making HTTP requests while testing

When making HTTP requests inside a test using HTTPotion such as HTTPotion.get("https://google.com") I get the following error message as response: {:error, %{code: 500, message: "enetunreach"}} I have tried the same request using Postman and it works OK.

That sounds like it can’t reach the internet, though error 500 for that seems odd.

HTTPotion.get/2 shouldn’t even return an :error tuple, according to its spec…

It returns a HTTPotion.http_result/0.

So could you please show the full code that produces this result?

edit Skimming httpotions code I also can’t find a codepath that would generate a tuple of any kind… All requests end with calling into this function:

1 Like

Yes, the actual HTTPotion response is %HTTPotion.ErrorResponse{message: "enetunreach"}

So why obfuscate the error? That has only lead to additional confusion. I can’t see a 500 anymore in the “real” return.

Also HTTPotion.ErrorResponsees will only be returned when no connection to the remote host could be made. enetunreach hereby means that no route to the target network exists.

So your host is able to resolve the name google.com to an IP, but then can’t find a route to the network this IP is in.

So ,y assumption is, that you are either firewalled or proxied or both, and you forgot to set up the proxy or did not allow internet access for your application in your firewall or…

I disabled my firewall temporarily to see if that was the problem, it was not. The weird thing is, my requests work fine on Postman.

This still does not answer the question if you live behind a proxy. You do not necessarily need to know about it. Some providers, especially those using mobile networks, are very good at hiding proxies. Also some corporate networks do some hidden proxiing.

But this is basically it… From what we are able to see it is a network issue and has to be debugged as such. Try sniffing using wireshark or tcpdump and compare sent requests. perhaps you see some significant difference?