LocationValueError when using python requests module

匿名 (未验证) 提交于 2019-12-03 09:02:45

问题:

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.

回答1:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!