Запросы Python Отсутствуют зависимости для поддержки SOCKS при использовании SOCKS5 из терминала

Я пытаюсь взаимодействовать с API из моей оболочки Python 2.7, используя пакет, основанный на запросах Python. Дело в том, что удаленный адрес заблокирован моей сетью (университетской библиотекой).

Если говорить об API, я делаю следующее:

~$ ssh -D 8080 [email protected]

А затем в новом терминале на локальном компьютере:

~$ export http_proxy=socks5://127.0.0.1:8080 https_proxy=socks5://127.0.0.1:8080

Затем я запускаю программу в консоли Python, но терпит неудачу:

~$ python
>>> import myscript
>>> id = '1213'
>>> token = 'jd87jd9'
>>> connect(id,token)

File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 518, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 585, in send
    r = adapter.send(request, **kwargs)
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 370, in send
    conn = self.get_connection(request.url, proxies)
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 273, in get_connection
    proxy_manager = self.proxy_manager_for(proxy)
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 169, in proxy_manager_for
    **proxy_kwargs
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 43, in SOCKSProxyManager
    raise InvalidSchema("Missing dependencies for SOCKS support.")
requests.exceptions.InvalidSchema: Missing dependencies for SOCKS support.

Этот отрывок взят из модуля запросов adsapters.py:

> try:
>     from .packages.urllib3.contrib.socks import SOCKSProxyManager except ImportError:
>     def SOCKSProxyManager(*args, **kwargs):
>         raise InvalidSchema("Missing dependencies for SOCKS support.")

Теперь проблема, похоже, возникла в SOCKSProxyManager urllib3.

Итак, я читал, что вы можете использовать SOCKSProxyManager с SOCKS5, если вы установили PySocks или выполняете pip установить urllib3[socks]

Увы, я безуспешно пробовал и PySocks, и urllib3 с Socks.

Любая идея другого обходного пути?

ИЗМЕНИТЬ:

Я также попробовал запросы на установку pip[socks] (это запросы 2.10.0 с поддержкой Socks), и я получаю следующее:

  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 467, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: SOCKSHTTPSConnectionPool(host='api-server.com', port=443): Max retries exceeded with url: /auth (Caused by NewConnectionError('<requests.packages.urllib3.contrib.socks.SOCKSHTTPSConnection object at 0x95c7ccc>: Failed to establish a new connection: SOCKS5 proxy server sent invalid data',))

person BringBackCommodore64    schedule 05.08.2016    source источник


Ответы (14)


У меня была такая же проблема с conda и запросами 2.11 (я работаю на виртуальной машине Ubuntu за корпоративным прокси).

Эта проблема помогла мне. Я изменил свою переменную среды all_proxy (которая изначально была настроена на прокси-сервер SOCK socks://....) на версию https в моем файле .bashrc:

export all_proxy="https://<proxy>:<port>/"

и теперь это работает.

person Guillaume Mohr    schedule 10.10.2016
comment
Спасибо! Я полностью отказался от работы с библиотекой, поэтому не могу проверить. Но я доверяю тебе! - person BringBackCommodore64; 11.10.2016
comment
но я использую прокси-сервер socks - person Jiang YD; 27.07.2018
comment
Совет для нубов: echo $all_proxy чтобы увидеть, что сейчас установлено на вашей машине. Вероятно, это socks://<proxy>:<port>/, поэтому все, что вам нужно сделать, это заменить префикс. - person Pavel Komarov; 09.01.2019
comment
либо это, либо pip install pysocks - person benzkji; 24.06.2019
comment
это исправить это для меня. Спасибо. даже со всеми установленными deps вы получите эту ошибку, если используется префикс socks:// - person Erik Aronesty; 31.08.2019

Это означает, что запросы используют socks в качестве прокси, и эти socks не установлены.

Просто запустите pip install pysocks

person louis_guitton    schedule 04.06.2017
comment
Это работает для меня, однако нам нужно сначала закрыть прокси, чтобы установить этот модуль. - person JasonWayne; 23.01.2018
comment
В том-то и проблема, если pip install не проходит через прокси, как мне установить pysocks - person iopq; 27.11.2019
comment
Вау, во второй раз я сталкиваюсь с этой проблемой, гуглю и нахожу ваш ответ, который является решением, которое я всегда забываю :) Если только stackoverflow позволяет голосовать несколько раз, я бы проголосовал за это тысячу раз :) - person akkk3; 31.12.2019

В Ubuntu вы можете запустить:
unset all_proxy && unset ALL_PROXY

person GraveAccent    schedule 17.04.2018

Я добавил requests[socks]>=2.10.0 в свой файл requirements.txt, обновил переменную env https_proxy и обнаружил указанную выше ошибку. Затем я попробовал обычный pip install requests[socks] после сброса переменной env https_proxy, и PySocks был установлен. Я не уверен, почему pip install -Ur requirements.txt не удалось установить PySocks в первый раз.

После этого я смог сделать запрос на питоне, используя прокси-сервер socks.

Похоже, ваш сервер socks не работает. Я хотел бы узнать, можете ли вы или ваш администратор просмотреть журналы и посмотреть, на что жалуется машина.

person Kirk    schedule 08.08.2016
comment
Я проверю ваше предложение, но как только у меня будет возможность. На данный момент я решил работать из другого места (не из университета). И я дам вам знать. На данный момент я проголосую за ваш ответ. Спасибо, Кирк! - person BringBackCommodore64; 09.08.2016
comment
Да, это была неочевидная проблема. По какой-то причине этот модуль не был корректно установлен через requirements.txt - person Thane Brimhall; 02.08.2017

Я также наткнулся на эту проблему, выполняя простой pip install -U pip, но информация, которую я нашел из вашего вопроса, помогла мне решить мою проблему. Я на Mac OS X.

Как вы указали, adapters.py из requests пакет пытался сделать это:

try:
    from .packages.urllib3.contrib.socks import SOCKSProxyManager
except ImportError:
    def SOCKSProxyManager(*args, **kwargs):
        raise InvalidSchema("Missing dependencies for SOCKS support.")

Поэтому кажется разумным искать место определения SOCKSProxyManager. Кажется, он находится в модуле «contrib» в urllib3 и по умолчанию не устанавливается вместе с urllib3. Строка документации этого модуля гласит:

This module contains provisional support for SOCKS proxies from within
urllib3. This module supports SOCKS4 (specifically the SOCKS4A variant) and
SOCKS5. To enable its functionality, either install PySocks or install this
module with the ``socks`` extra.

В инструкциях pip docs говорится о дополнительных возможностях setuptools:

6. Install a package with setuptools extras.

$ pip install SomePackage[PDF]
$ pip install git+https://git.repo/some_pkg.git#egg=SomePackage[PDF]
$ pip install SomePackage[PDF]==3.0
$ pip install -e .[PDF]==3.0  # editable project in current directory

Итак, я следовал инструкциям и сделал:

$ pip install 'urllib3[socks]'

Затем я продолжил с pip install -U pip, что я и должен был делать, и теперь это работает.

Интересно, сколько людей были обмануты квадратными скобками, поскольку Bash и другие оболочки часто рассматривают их как специальный символ, который необходимо экранировать, чтобы он достиг вызываемой программы (в данном случае pip).

person easoncxz    schedule 15.03.2017
comment
Приятно знать, что моя проблема помогла вам решить вашу. И, к счастью, ваш тоже решит чью-то проблему! - person BringBackCommodore64; 17.03.2017

В дебиане 10, Python 3:

pip3 install pysocks
person Alexander Villalobos    schedule 07.04.2020

Я получил ту же ошибку всего несколько минут назад. Затем переустановил request[socks] через pip. Похоже, в socks отсутствует часть win-inet_pton. Пип установил его и проблема решена.

person phosphorus    schedule 05.06.2017
comment
pip install request[socks] НЕ работало, но pip install -U requests[socks] работало - person JinSnow; 14.11.2017
comment
Параметр -U --upgrade сам по себе не будет работать, если у вас был установлен какой-либо предыдущий пакет. pip install -U requests[socks] --ignore-installed будет работать. - person m3nda; 12.08.2018
comment
@ erm3nda --force-reinstall несколько чище, чем --ignore-installed, так как он сначала очистит (возможно, другой) ранее установленный пакет. Я использую --ignore-installed только тогда, когда хочу локально переопределить пакет, установленный для всей системы (что может произойти внутри виртуальной среды, настроенной с помощью --system-site-packages). - person blubberdiblub; 02.10.2018

Вы должны добавить поддержку socks с библиотекой python requests:

pip install requests[socks]
person Ali Sajjad    schedule 18.08.2020

Я столкнулся с той же проблемой, когда получил ошибку Missing dependencies for SOCKS support. с Anaconda Python 3.7.

Поскольку команда conda работала нормально, я установил pysocks с помощью команды conda install pysocks.

Это решило проблему.

person Alen Jacob    schedule 17.04.2020

Просто отключите переменную среды all_proxy, и это должно сработать. Также вы можете обратиться к этой проблеме на github.

В Ubuntu вы можете использовать следующую команду unset all_proxy и перезапустить терминал

person latsha    schedule 09.01.2017
comment
К сожалению, я решил проблему, не пойдя в библиотеку. Поэтому я не могу дать вам обратную связь. Но все равно спасибо! :) - person BringBackCommodore64; 09.01.2017

Моя среда — Ubuntu 16.4 LTS и Python3.5.2. Я использую pip3 для установки libs, у меня такая же проблема. поэтому я использую команду unset ALL_PROXY для решения этой проблемы, и она работает.

PS: используйте printenv | grep -i proxy, чтобы показать информацию о прокси.

person Kiah Han    schedule 01.09.2017
comment
Спасибо, ваш ответ побудил меня исправить мою проблему :) - person Jesbus; 07.06.2018

В Ubuntu я делаю следующие команды:

# Unset socks proxy
unset all_proxy    
unset ALL_PROXY
# Install missing dependencies:
pip install pysocks
# Reset proxy
source ~/.bashrc
person Cwang    schedule 20.09.2019

Я использовал все вышеперечисленные методы, но у меня сработал только этот:

set | grep -i all_proxy

он вернулся:

ALL_PROXY=socks://127.0.0.1:1080/
all_proxy=socks://127.0.0.1:1080/

а потом я сделал так:

export all_proxy=""

Наконец-то ошибок больше не появлялось.

person Runstone    schedule 18.11.2019

Получил ту же ошибку после сообщения о том, что pysocks не будет выполняться требованием requests[socks]>=0.23.0.

Я мог бы (эзотерически) исправить это, удалив требование requests>=0.23.0, которое у меня также было в том же requirements.txt.

Запуск Python3.7 в Debian, а пользователь, сообщивший об ошибке, использует python3.6 в Ubuntu.

До патча

$ cat requirements.txt 
requests>=2.23.0
requests[socks]>=2.23.0
$ python3 -m venv venv
$ . venv/bin/activate
(venv) $ pip --no-cache-dir install -r requirements.txt
Collecting requests>=2.23.0 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/45/1e/0c169c6a5381e241ba7404532c16a21d86ab872c9bed8bdcd4c423954103/requests-2.24.0-py2.py3-none-any.whl (61kB)
    100% |████████████████████████████████| 71kB 202kB/s 
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests>=2.23.0->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/9f/f0/a391d1463ebb1b233795cabfc0ef38d3db4442339de68f847026199e69d7/urllib3-1.25.10-py2.py3-none-any.whl (127kB)
    100% |████████████████████████████████| 133kB 617kB/s 
Collecting idna<3,>=2.5 (from requests>=2.23.0->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/a2/38/928ddce2273eaa564f6f50de919327bf3a00f091b5baba8dfa9460f3a8a8/idna-2.10-py2.py3-none-any.whl (58kB)
    100% |████████████████████████████████| 61kB 2.8MB/s 
Collecting chardet<4,>=3.0.2 (from requests>=2.23.0->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
    100% |████████████████████████████████| 143kB 10.4MB/s 
Collecting certifi>=2017.4.17 (from requests>=2.23.0->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/5e/c4/6c4fe722df5343c33226f0b4e0bb042e4dc13483228b4718baf286f86d87/certifi-2020.6.20-py2.py3-none-any.whl (156kB)
    100% |████████████████████████████████| 163kB 4.7MB/s 
Installing collected packages: urllib3, idna, chardet, certifi, requests
Successfully installed certifi-2020.6.20 chardet-3.0.4 idna-2.10 requests-2.24.0 urllib3-1.25.10

После патча

Теперь применяем следующий патч:

diff --git a/sauron/requirements.txt b/sauron/requirements.txt
index a0c901b..f38d18f 100644
--- a/sauron/requirements.txt
+++ b/sauron/requirements.txt
@@ -1,2 +1 @@
-requests>=2.23.0
 requests[socks]>=2.23.0
$ cat requirements.txt 
requests[socks]>=2.23.0
$ cat requirements.txt 
requests[socks]>=2.23.0
(venv) $ pip --no-cache-dir install -r requirements.txt 
Collecting requests[socks]>=2.23.0 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/45/1e/0c169c6a5381e241ba7404532c16a21d86ab872c9bed8bdcd4c423954103/requests-2.24.0-py2.py3-none-any.whl (61kB)
    100% |████████████████████████████████| 71kB 234kB/s 
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests[socks]>=2.23.0->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/9f/f0/a391d1463ebb1b233795cabfc0ef38d3db4442339de68f847026199e69d7/urllib3-1.25.10-py2.py3-none-any.whl (127kB)
    100% |████████████████████████████████| 133kB 678kB/s 
Collecting chardet<4,>=3.0.2 (from requests[socks]>=2.23.0->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
    100% |████████████████████████████████| 143kB 2.3MB/s 
Collecting idna<3,>=2.5 (from requests[socks]>=2.23.0->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/a2/38/928ddce2273eaa564f6f50de919327bf3a00f091b5baba8dfa9460f3a8a8/idna-2.10-py2.py3-none-any.whl (58kB)
    100% |████████████████████████████████| 61kB 6.2MB/s 
Collecting certifi>=2017.4.17 (from requests[socks]>=2.23.0->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/5e/c4/6c4fe722df5343c33226f0b4e0bb042e4dc13483228b4718baf286f86d87/certifi-2020.6.20-py2.py3-none-any.whl (156kB)
    100% |████████████████████████████████| 163kB 4.8MB/s 
Collecting PySocks!=1.5.7,>=1.5.6; extra == "socks" (from requests[socks]>=2.23.0->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl
Installing collected packages: urllib3, chardet, idna, certifi, PySocks, requests
Successfully installed PySocks-1.7.1 certifi-2020.6.20 chardet-3.0.4 idna-2.10 requests-2.24.0 urllib3-1.25.10

Писоцка эффектно вытащили.

person darosior    schedule 20.08.2020