使用python请求模块时的LocationValueError

LocationValueError when using python requests module

我一直在使用请求包与Web进行交互,过去没有任何问题。最近当使用我大约一周没用过的脚本时,我在执行例程requests.get()调用时遇到以下错误:

1
LocationValueError: No host specified.

背景研究

经过大量的谷歌搜索python requests LocationValueErrorpython requests no host errorpython urllib3 LocationValueError的各种排列(根据堆栈跟踪错误由urllib3提出请求使用下面)我只能设法找到埋藏在文件:

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无法处理。