Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LocationValueError when using python requests module

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.

like image 606
Cottonbud Avatar asked Dec 13 '25 01:12

Cottonbud


1 Answers

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.

like image 90
miracle2k Avatar answered Dec 14 '25 15:12

miracle2k



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!