I have been using the requests package to interact with the web and had no issues in the past. Recently when using a script that I haven't used for about a week I encountered the following error while doing a routine requests.get()
call:
LocationValueError: No host specified.
Background Research
After a lot of googling various permutations of python requests LocationValueError
, python requests no host error
and python urllib3 LocationValueError
(according to the stack trace the error is raised by urllib3
which requests uses underneath) I only managed to find this information buried in the urllib3
documentation:
exception urllib3.exceptions.LocationValueError
Raised when there is something wrong with a given URL input.
What I've tried
Thinking something might be wrong with my version of the requests package as this is arguably one of the most basic calls used in the requests package I did the following:
- Reinstalled requests
- Created a virtual environment and installed requests using pip
- Installed requests from source
- Installing urllib3 expicitly
- Installed python 3.4 from source then tried that (I use python3.5 at the moment)
In all instances I used the following code to see whether requests was still throwing the LocationValueError:
import requests address = 'http://www.google.com/' requests.get(address)
Which has always worked in the past. I checked on a different computer (an ubuntu laptop) and it works there, leading me to think that the issue is specific to my computer.
Stack Trace of the Problem
Here is the stack trace I got when using requests installed in a virtualenv and with python3.4.
In [5]: import requests In [6]: requests.get('http://www.google.com/') --------------------------------------------------------------------------- LocationValueError Traceback (most recent call last) in () ----> 1 requests.get('http://www.google.com/') /home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/api.py in get(url, params, **kwargs) 67 68 kwargs.setdefault('allow_redirects', True) ---> 69 return request('get', url, params=params, **kwargs) 70 71 /home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/api.py in request(method, url, **kwargs) 48 49 session = sessions.Session() ---> 50 response = session.request(method=method, url=url, **kwargs) 51 # By explicitly closing the session, we avoid leaving sockets open which 52 # can trigger a ResourceWarning in some cases, and look like a memory leak /home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) 466 } 467 send_kwargs.update(settings) --> 468 resp = self.send(prep, **send_kwargs) 469 470 return resp /home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/sessions.py in send(self, request, **kwargs) 574 575 # Send the request --> 576 r = adapter.send(request, **kwargs) 577 578 # Total elapsed time of the request (approximately) /home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies) 335 """ 336 --> 337 conn = self.get_connection(request.url, proxies) 338 339 self.cert_verify(conn, request.url, verify, cert) /home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/adapters.py in get_connection(self, url, proxies) 247 proxy = prepend_scheme_if_needed(proxy, 'http') 248 proxy_manager = self.proxy_manager_for(proxy) --> 249 conn = proxy_manager.connection_from_url(url) 250 else: 251 # Only scheme should be lower case /home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/packages/urllib3/poolmanager.py in connection_from_url(self, url) 137 """ 138 u = parse_url(url) --> 139 return self.connection_from_host(u.host, port=u.port, scheme=u.scheme) 140 141 def urlopen(self, method, url, redirect=True, **kw): /home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/packages/urllib3/poolmanager.py in connection_from_host(self, host, port, scheme) 246 247 return super(ProxyManager, self).connection_from_host( --> 248 self.proxy.host, self.proxy.port, self.proxy.scheme) 249 250 def _set_proxy_headers(self, url, headers=None): /home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/packages/urllib3/poolmanager.py in connection_from_host(self, host, port, scheme) 108 109 if not host: --> 110 raise LocationValueError("No host specified.") 111 112 scheme = scheme or 'http' LocationValueError: No host specified.
If anyone can help explain the cause of the error or point me in the right direction that'd be most appreciated. This issue also happens when I'm using a request.Session object to get pages for an extended session.