LocationValueError when using python requests module
我一直在使用请求包与Web进行交互,过去没有任何问题。最近当使用我大约一周没用过的脚本时,我在执行例程
1 | LocationValueError: No host specified. |
背景研究
经过大量的谷歌搜索
exception urllib3.exceptions.LocationValueError
Raised when there is something wrong with a given URL input.
我试过的
我的版本的请求包可能有问题,因为这可能是请求包中使用的最基本的调用之一,我做了以下操作:
- 重新安装的请求
- 使用pip创建虚拟环境并安装请求
- 来自源的已安装请求
- expicitly安装urllib3
- 从源代码安装python 3.4然后尝试了(我现在使用python3.5)
在所有实例中,我使用以下代码来查看请求是否仍然抛出LocationValueError:
1 2 3 | import requests address = 'http://www.google.com/' requests.get(address) |
这在过去一直有效。我检查了另一台计算机(一台ubuntu笔记本电脑),它在那里工作,让我认为这个问题是我的电脑特有的。
堆栈跟踪问题
这是我在使用virtualenv和python3.4中安装的请求时获得的堆栈跟踪。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 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. |
如果有人可以帮助解释错误的原因或指出我正确的方向,那将是最受欢迎的。当我使用request.Session对象获取扩展会话的页面时,也会发生此问题。
对我来说,问题是我被请求的网址重定向到位置:https //,这可能无效,但urllib3无法处理。