2015-11-30 3 views
2

Я использовал пакет запросов для взаимодействия с сетью и не имел проблем в прошлом. В последнее время при использовании сценария, который я не использовал в течение недели я столкнулся следующее сообщение об ошибке при выполнении рутинного requests.get() вызова:LocationValueError при использовании модуля запросов python

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.

То, что я пытался

Думая что-то может быть не так с моей версией пакета запросов, как это, возможно, один из самых основных вызовов, используемых в пакете запросов я сделал следующее:

  • переустановил запросы
  • создания виртуальной среды и установленных запросов с использованием пипсов
  • установленные запросы от источника
  • Установка urllib3 expicitly
  • установлен 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 объект для получения страниц для расширенного сеанса.

+0

Есть ли у вас локальные конфигурации dns? как пользовательские 'hosts' или что-то еще? прокси-сервер? брандмауэр? – sobolevn

+0

Я использовал VPN в прошлом, но я все еще получаю ошибку, даже если она деактивирована. Кроме этого, я не изменил конфигурацию сети, так как я установил свою ОС. – Cottonbud

+0

Можете ли вы позвонить с помощью 'urllib'? Asin, это специфично для модуля 'request'? И какую ОС вы используете? – Jarwin

ответ

2

Для меня проблема заключалась в том, что запрошенный мной адрес сделал перенаправление на Местоположение: https //, что возможно недействительно, но с которым не удалось обработать urllib3.

Смежные вопросы