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.
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.
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:
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.
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.
For me, the problem was that the url I was requested did a redirect to Location: https//, which is possibly not valid, but which urllib3 couldn't handle.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With