我一直在使用请求包与网络交互,过去没有遇到任何问题。最近在使用我大约一周未使用的脚本时,在执行例行 requests.get()
调用时遇到以下错误:
LocationValueError: No host specified.
背景研究
经过大量谷歌搜索 python requests LocationValueError
、python requests no host error
和 python urllib3 LocationValueError
的各种排列(根据堆栈跟踪错误是由请求在下面使用的 urllib3
引发的)我只设法找到隐藏在 urllib3
文档中的信息:
exception urllib3.exceptions.LocationValueError
Raised when there is something wrong with a given URL input.
我尝试过的
认为我的请求包版本可能有问题,因为这可以说是请求包中使用的最基本的调用之一,我做了以下操作:
- 重新安装请求
- 创建虚拟环境并使用 pip 安装请求
- 来自源的已安装请求
- 显式安装 urllib3
- 从源代码安装 python 3.4 然后尝试(我现在使用 python3.5)
在所有情况下,我都使用以下代码来查看请求是否仍在抛出 LocationValueError:
import requests
address = 'http://www.google.com/'
requests.get(address)
这在过去一直有效。我检查了另一台计算机(一台 ubuntu 笔记本电脑),它在那里工作,这让我认为这个问题是我的计算机特有的。
问题的堆栈跟踪
这是我在使用安装在 virtualenv 中的请求和 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.
如果有人可以帮助解释错误原因或为我指出正确的方向,我们将不胜感激。当我使用 request.Session 对象获取扩展 session 的页面时,也会发生此问题。
最佳答案
对我来说,问题是我被请求的 url 重定向到 Location: https//,这可能是无效的,但 urllib3 无法处理。
关于python - 使用 python 请求模块时的 LocationValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33994095/