使用python requests模块时出现LocationValueError错误

4

我一直使用requests包与网络进行交互,在过去没有遇到任何问题。最近,当我使用了一个已经有一周没用的脚本时,在执行常规的requests.get()调用时遇到了以下错误:

LocationValueError: No host specified.

背景研究

在谷歌搜索了各种排列组合的 python requests LocationValueErrorpython requests no host errorpython urllib3 LocationValueError(根据堆栈跟踪,错误是由 requests 底层使用的 urllib3 引发的),我只能在 urllib3 文档中找到这个信息:

exception urllib3.exceptions.LocationValueError

给定的 URL 输入有误时引发。

我尝试过的

认为可能是 requests 包版本有问题,因为这可以说是 requests 包中使用最基本的调用之一,于是我做了以下尝试:

  • 重新安装 requests
  • 创建虚拟环境并使用 pip 安装 requests
  • 从源码安装 requests
  • 明确安装 urllib3
  • 安装 Python 3.4 然后尝试(我现在使用的是 Python3.5)

在所有情况下,我都使用以下代码来查看 requests 是否仍然抛出 LocationValueError 错误:

import requests
address = 'http://www.google.com/'    
requests.get(address)

这在过去一直有效。我在另一台电脑(一台Ubuntu笔记本电脑)上检查,它在那里能够工作,这让我认为问题是特定于我的电脑。

问题的堆栈跟踪

这是我在虚拟环境中使用安装了Python3.4的requests时得到的堆栈跟踪。

In [5]: 导入请求包
In [6]: 请求.get('http://www.google.com/') --------------------------------------------------------------------------- LocationValueError Traceback (most recent call last) in () ----> 1 请求.get('http://www.google.com/')
/home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/api.py 在 get 函数中 67 68 kwargs.setdefault('allow_redirects', True) ---> 69 返回 请求('get', url, params=params, **kwargs) 70 71
/home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/api.py 中的请求方法 48 49 session = sessions.Session() ---> 50 响应 = session.请求(方法=method, url=url, **kwargs) 51 # 显式关闭会话,避免在某些情况下留下套接字开启,从而引发 ResourceWarning,并看起来像内存泄漏
/home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/sessions.py 中的请求方法 466 } 467 send_kwargs.update(settings) --> 468 响应 = self.send(prep, **send_kwargs) 469 470 return resp /home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/sessions.py 中的发送方法 574 575 # 发送请求 --> 576 r = adapter.send(request, **kwargs) 577 578 # 请求的总耗时(大约)
/home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/adapters.py 中的发送方法 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 中的获取连接方法 247 代理 = 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 # 只有方案应该是小写字母
/home/michael/Documents/my_test_env/lib/python3.4/site-packages/requests/packages/urllib3/poolmanager.py 中的获取连接方法 137 """ 138 u = parse_url(url) --> 139 返回 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 中的获取主机连接方法 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 中的获取主机连接方法 108 109 if not host: --> 110 raise LocationValueError("未指定主机。") 111 112 方案 = scheme or 'http'
LocationValueError: 未指定主机。
如果有人能帮忙解释错误的原因或者指导我正确的方向,那将不胜感激。当我使用一个request.Session对象获取页面时,也会出现这个问题。

你有本地 DNS 配置吗?比如自定义的 hosts 或其他什么?代理?防火墙? - sobolevn
我以前用过VPN,但是即使它处于未激活状态,我仍然遇到了错误。除此之外,自从安装操作系统以来,我并没有改变网络配置。 - Cottonbud
你能使用 urllib 进行电话呼叫吗?Asin,这个特定于 requests 模块吗?你使用的是哪个操作系统? - Jarwin
1个回答

2

对我来说,问题在于我请求的URL重定向到Location: https//,这可能无效,但是urllib3无法处理。


你是如何解决它的? - pippo1980

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接